你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
ParameterTensor{}
创建可学习参数的标量、矢量、矩阵或张量。
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
parameters
shape:参数作为数组) 的形状 (维度。 例如(13:42),创建包含 13 行和 42 列的矩阵。 对于某些操作,给定为 0 的维度会自动推断 (在此处)init(默认的“uniform”) :指定随机初始化,例如init='heNormal'(在此处)initOutputRank(默认 1) :指定前导扇出轴数。 如果为负数,则 (在此处看到尾随扇出轴数)initValueScale(默认 1) :应用于随机初始化值的附加缩放因子randomSeed(默认 -1) :如果为正数,请使用此随机种子进行随机初始化。 如果为负值,请使用每个计数器增加的计数器ParameterTensor{}initValue:指定使用常量值的初始化,例如initValue=0initFromFilePath:通过从文件加载初始值来指定初始化。 例如initFromFilePath="my_init_vals.txt"learningRateMultiplier:系统学习速率将由此 (0 缩放,以禁用学习 ) (在此处)
返回值
可学习参数的张量。
说明
此工厂函数创建可学习参数的标量、矢量、矩阵或张量,即操作识别 "train" 为包含应在训练期间更新的参数的张量。
值将初始化,具体取决于给定的可选参数
- 随机数(如果
init给定); - 如果
initValue给定,则为常量;或 - 如果
initFromFilePath给定,则从外部输入文件读取张量。 默认为init="uniform"。
若要创建排名>为 2 的标量、矢量、矩阵或张量,请将以下内容作为 shape 参数传递:
(1)标量;(M)用于包含元素的M列向量;(1:N)用于包含N元素的行向量。 行向量是一行矩阵;(M:N)用于包含行和I列的N矩阵;(I:J:K...)对于任意排名>2 的张量 (注意:允许的最大排名为 12) ;(W:H:C)用于与具有通道的图像C维度匹配的[W x H]张量。
自动维度推理
ParameterTensor将权重用作特定操作的直接输入时,允许将某些维度指定为 Inferred。 例如, 矩阵产品ParameterTensor{42:Inferred} * x) 将自动推断第二个维度等于维度 x。
对于层的输入来说,这非常方便,因为它将用户的 BrainScript 代码从传入输入维度的负担中解脱出来。 此外,在某些情况下,确定层的精确输入维度非常繁琐,例如,对于没有填充的锥形/池组合的金字塔顶部的第一个完全连接层,其中每个卷积和池操作可能会删除边界像素的行或列,并步幅缩放维度。
此功能允许CNTK的预定义层仅 (指定 (,例如 DenseLayer{1024}) 。
随机初始化
参数选择随机初始化,该参数在统一分布和正态分布之间进行选择 init ,其中范围/标准偏差计算为扇入和扇出函数:
init 的值 |
分发 | 范围/标准偏差 |
|---|---|---|
| “heNormal” | 一般 | sqrt (2 / fanIn) |
| “heUniform” | uniform | sqrt (6 / fanIn) |
| “glorotNormal” | 一般 | sqrt (2 / (fanIn+fanOut) ) |
| “glorotUniform” | uniform | sqrt (6 / (fanIn+fanOut) ) |
| “xavier” | uniform | sqrt (3 / fanIn) |
| “uniform” | uniform | 1/20 |
| “gaussian” | 一般 | sqrt (0.04 / fanIn) |
| “zero” | 不适用 | 0 |
(指定 zero .) 对于统一分布,参数将在 [-range, range] 中统一 initValue=0初始化;对于正态分布,平均值始终为零。
请注意,默认值 init 是 uniform 直接使用 ParameterTensor{} 时。
但是,默认值为 glorotUniform 包含内部参数的 层 ,例如 DenseLayer{} 和 ConvolutionalLayer{}。
用于随机初始化的扇入和扇出
随机初始化假定参数属于某种形式的矩阵产品(如运算)的一部分,该操作具有定义完善的扇入和扇出,用于确定上表中随机值的缩放。 默认情况下,第一个轴被视为扇出,其余轴/轴为扇入,匹配正则矩阵产品的语义。
可选参数initOutputRank可用于指定应被视为扇出的前导轴数。例如,对于CNTK扩展张量解释[K]中的矩阵积,可以将一维向量x映射到Times (W, x, outputRank=2)一个[I x J]维度排名 2 对象,其中具有W形状[I x J x K]。
此处, initOutputRank=2 指定在缩放随机初始化值时,扇出是 I*J 扇入和扇入 K。
指示扇出轴为尾随轴的负值 initOutputRank 。 例如,典型的图像处理设置的 ConvolutionalLayer{} 筛选器内核和基础 Convolution() 操作有一个形状 [W x H x C x K],其中 K 扇出,而扇入是 W*H*C。
这是由 initOutputRank=-1.
从文件读取初始值
可以从文本文件中读取初始值。 为此,请传递可选参数 initFromFilePath的路径名称。
文本文件应包含每矩阵行的一行,由空格分隔的数字组成,每列一行。
文件中的行和列维度必须匹配 shape。
特定于参数的学习速率
可以使用可选 learningRateMultiplier 参数实现特定于参数的学习速率。
执行参数更新时,此因子与实际学习速率相乘。
例如,如果指定为 0,则参数不会更新,则为常量。
示例
将初始化为 heUniform (默认值的常规参数矩阵将 heNormal) :
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
将初始化为零的常规偏差参数:
b = ParameterTensor {outDim, initValue=0}
应从文件读取并保留常量的嵌入矩阵:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
具有numChannels颜色平面的 [width x height]-size 图像的完整大小的偏差参数:
bFull = ParameterTensor {(width:height:numChannels)}
不断{}
创建常量张量。
Constant {scalarValue, rows=1, cols=1}
parameters
scalarValue:此常量的值rows(默认值:1) :行数(如果常量不是标量)cols(默认值:1) :col 数(如果常量不是标量)
返回值
一个常量,标量或维度 [rows x cols]的排名 1 或排名 2 对象,其中所有元素都填充 scalarValue。
说明
常数值。 可以是标量,也可以是排名 1 对象, (向量) 或排名 2 对象 (矩阵) 使用单个 (值(如 0) )初始化。 请注意,由于对于向量和矩阵常量,所有值都是相同的,因此通常可以将与 元素运算 结合使用的常量指定为标量,同时利用 广播。
实现说明:
A Constant() 是一个 ParameterTensor{} 与 learningRateMultiplier=0。
示例
在 0..1 范围内内插权重 alpha 为 0..1 的两个值之间的内插 (“软复用器”) :
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
哈明损失 (cf. 在这里) :
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)