因此,我开始学习ML,并且需要使用Python进行编码。我遵循有关反向传播的教程。因此,在其中,我面临着一个问题,就是要把算法转换为支持矩阵乘法的算法,以便使其运行得更快。以下代码来自更新偏差和权重的函数。我需要对其进行更改,因此无需运行单个输入/输出对,而是运行整个输入和输出矩阵。迷你批次是一个包含10个元素的列表。列表中的每个元素都是两个元组,一个元组是输入,一个784x1大小的矩阵。另一个元组是输出,一个10x1大小的矩阵。我尝试将输入分组到784x10x1数组,然后将其转换为784x10数组。我以两种方式做到了,如以下代码所示:
# for clearance - batch[0] is the first tuple in the element in mini_batch, which is, as recalled, the input array.
# mini_batch[0][0] is the input array of the first element in mini_batch, which is a 784x1 array as I mentioned earlier
inputs3 = np.array([batch[0] for batch in mini_batch]).reshape(len(mini_batch[0][0]), len(mini_batch))
inputs2 = np.array([batch[0].ravel() for batch in mini_batch]).transpose()
inputs3
和inputs2
均为784x10数组,但由于某些原因,它们不相等。我不明白为什么,所以如果有人可以向我解释为什么会有区别,我将不胜感激。 最佳答案
>>> A = np.array([[1,2,3],[4,5,6]])
>>> A.reshape(3,2)
array([[1, 2],
[3, 4],
[5, 6]])
>>> A.transpose()
array([[1, 4],
[2, 5],
[3, 6]])
从这个简短的示例中,您可以看到A.transpose()!= A.reshape(3,2)。
想象一个尺寸为3x2的空白矩阵。 A.reshape(3,2)将从顶行开始从左到右读取A(一个2x3矩阵)中的值并将它们存储在空白矩阵中。使这些矩阵具有不同的值。