你当前正在访问 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初始化;对于正态分布,平均值始终为零。

请注意,默认值 inituniform 直接使用 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)