你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Times 和 TransposeTimes
CNTK矩阵产品。
A * B
Times (A, B, outputRank=1)
TransposeTimes (A, B, outputRank=1)
parameters
A
矩阵积的第一个参数。 可以是时间序列。B
矩阵产品的第二个参数。 可以是时间序列。outputRank
(默认值:1) :构成输出维度的A
轴数。 请参阅下面的“张量扩展解释”。
返回值
生成的矩阵积 (张量) 。 如果任一输入是时间序列,则这是时间序列。
说明
该 Times()
函数实现矩阵产品,具有张量扩展。 运算符 *
是它的短手。 TransposeTimes()
转置第一个参数。
B
如果A
矩阵 (排名 2 张量) 或列向量 (排名 1 张量) ,A * B
则计算常见的矩阵产品,就像预期一样。
TransposeTimes (A, B)
计算矩阵产品 A^T * B
,其中 ^T
表示转位。 TransposeTimes (A, B)
具有相同的结果 Transpose (A) * B
,但它更有效,因为它避免了转置版本的 A
临时副本。
时间序列
B
这两A
者都可以是单个矩阵或时间序列。 循环网络的常见情况是 A
权重矩阵,而 B
它是一系列输入。
注意:如果是 A
时间序列,则操作效率不高,因为它会在每次步骤中启动单独的 GEMM 调用。 例外情况是 TransposeTimes()
,这两个输入都是列向量,其中存在特殊优化。
稀疏支持
Times()
并支持 TransposeTimes()
稀疏矩阵。 结果为密集矩阵,除非两者都是稀疏的。 最重要的两个用例包括:
B
是输入词的一热表示形式, (,或者更常见的是,整个单热向量序列) 。 然后,A * B
表示单词嵌入,其中单词的A
列是单词的嵌入向量。 下面是在CNTK中实现嵌入的建议方法:``` Embedding (x, dim) = Parameter (dim, 0/*inferred*/) * x e = Embedding (input, 300) ```
A
是标签词的单热表示形式。 常用的跨枚举条件和错误计数器可以分别按TransposeTimes()
如下方式编写,其中z
,顶级 Softmax () 分类器的输入以及L
可能稀疏的标签序列:``` CrossEntropyWithSoftmax (L, z) = ReduceLogSum (z) - TransposeTimes (L, z) ErrorPrediction (L, z) = BS.Constants.One - TransposeTimes (L, Hardmax (z)) ```
与标量相乘
矩阵产品 不能 用于将矩阵与标量相乘。 你将收到有关不匹配维度的错误。 若要与标量相乘,请改用元素型乘积 .*
。 例如,可以编写两个矩阵的加权平均值,如下所示:
z = Constant (alpha) .* x + Constant (1-alpha) .* y
与对角矩阵相乘
如果输入矩阵是对角线并存储为向量,请不要使用 Times()
,而是使用元素乘法 (ElementTimes()
或 .*
运算符) 。
例如
dMat = ParameterTensor {(100:1)}
z = dMat .* v
这利用广播语义将每个元素 v
与相应的行 dMat
相乘。
排名 > 2 的张量矩阵产品的扩展解释
如果A
和/或B
为较高排名的张量,则*
运算表示通用矩阵产品,其中除第一个维度的所有维度必须与前导维度A
B
匹配,并且通过平展进行解释。 例如,一个 [I x J x K]
和一个 [J x K x L]
张量 (的乘积,我们将从此缩写为 [I x J x K] * [J x K x L]
) 通过将两个张量重新解释为 [I x (J * K)] * [(J * K) x L]
矩阵,为其定义矩阵积并生成维度 [I x L]
的结果。 如果有人将权重矩阵的行视为与激活向量匹配的模式,则这是有意义的。 上述通用化允许这些模式本身是多维模式,例如图像或运行语音功能的窗口。
还可以在多个非匹配维度中使用 B
。 例如 [I x J] * [J x K x L]
,被解释为此矩阵产品: [I x J] * [J x (K * L)]
从而产生维度 [I x K x L]
的结果。 例如,这允许将矩阵应用于维度J
语音特征滚动窗口中L
的所有向量。
如果产品 的结果 应具有多个维度 (,例如将层的激活安排为二维字段) ,则不必使用 *
运算符,必须指出 Times (A, B, outputRank=m)
“模式”的排列维度的数量, m
以及哪些维度保留在输出中。 例如, Times (tensor of dim [I x J x K], tensor of dim [K x L], outputRank=2)
将解释为矩阵积 [(I * J) x K] * [K x L]
并生成维度 [I x J x L]
的结果。