你当前正在访问 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=0
initFromFilePath
:通过从文件加载初始值来指定初始化。 例如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)