你当前正在访问 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为较高排名的张量,则*运算表示通用矩阵产品,其中除第一个维度的所有维度必须与前导维度AB匹配,并且通过平展进行解释。 例如,一个 [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]的结果。