Che*_*vas 5 python linear-algebra matrix-multiplication cntk
通过本教程,我正在自学CNTK 。
有一个功能定义为
def linear_layer(input_var, output_dim):
input_dim = input_var.shape[0]
weight_param = C.parameter(shape=(input_dim, output_dim))
bias_param = C.parameter(shape=(output_dim))
mydict['w'], mydict['b'] = weight_param, bias_param
return C.times(input_var, weight_param) + bias_param
Run Code Online (Sandbox Code Playgroud)
在线性代数中,将两个矩阵相乘时,只有内部尺寸匹配时才有意义。更明确地说,左侧的第二维必须等于右侧的第一维。
在此函数中,“ times”函数的第2个(右)参数为“ weight_param”,其第一个尺寸设置为与第一个(左)参数的第一个尺寸相同。这不会起作用,因为内部尺寸不匹配。
我不确定input_var是(nx 2)还是(2 xn),但是无论哪种方式都会导致错误。如果它是(nx 2),则weight_param是(nx 2)和(nx 2)*(nx 2)不应计算。如果为(2 xn),则weight_param为(2 x 2),并且不应计算(2 xn)*(2 x 2)。
但是以某种方式,它运行得很好。更令人困惑的是,如果我将函数的最后一行更改为
return C.times_transpose(input_var, weight_param) + bias_param
Run Code Online (Sandbox Code Playgroud)
它产生exaclty相同的结果。
那么这是怎么回事?为什么这样做?为什么转置版本产生相同的结果?
PS:我正在与cntk同时教自己使用python,因此这些观察结果可能由python引起的。让我知道。
input_var为 (nx 2),其中 n 表示批次轴。如果打印input_var,您将得到类似 的内容Input('Input7', [#], [2]),#表示批处理轴。
input_var.shape[0]返回 2,因此 的第一个维度weight_param是 2(weight_param没有批处理轴,因为它是参数,而不是变量)。
所以内部尺寸匹配。
C.times_transpose产生相同的结果,因为output_dim示例中也恰好为 2。
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |