np.dot参数顺序及输出形状规则疑问:是否自动转置权重矩阵?
关于np.dot()的两个问题解答
1. 「第一个参数决定输出形状」具体指什么?
针对二维数组的矩阵乘法场景,np.dot(A, B)的输出形状规则很明确:
- 输出数组的第一个维度(行数)和第一个输入A的第一个维度完全一致
- 输出数组的第二个维度(列数)和第二个输入B的第二个维度完全一致
当然,前提是A的列数等于B的行数(满足矩阵乘法的维度匹配要求)。
拿你的例子来说:如果inputs是(1,4)的数组,只要和它相乘的weights维度是(4,7),那么np.dot(inputs, weights)的输出形状就是(1,7)——第一个维度1来自inputs的第一个维度,第二个维度7来自weights的第二个维度。这就是“第一个参数决定输出形状”的实际含义:输出的行维度由第一个输入主导。
2. np.dot()是否会自动转置第二个参数?
绝对不会。np.dot()严格遵循线性代数里的矩阵乘法规则,只会在第一个输入的最后一维长度等于第二个输入的倒数第二维长度时执行计算,否则直接抛出维度不匹配的错误。
你提到“按矩阵乘法规则需转置权重才能相乘”,大概率是搞反了书中权重矩阵的定义:通常神经网络里,输入是(样本数, 输入维度),权重矩阵应该是(输入维度, 神经元数),这样直接用np.dot(inputs, weights)就能得到(样本数, 神经元数)的输出。如果你的weights是(7,4),那确实需要转置成(4,7)才能和(1,4)的inputs相乘,但书中代码能运行的话,说明weights的维度本来就是(4,7),而非你理解的(7,4)。
内容的提问来源于stack exchange,提问作者tend0pain
相关产品推荐
相关产品推荐

