我正在尝试创建我的第一个神经网络。我想从我的神经网络预测28x28输入上的数字(我正在使用MNIST数据库)。该数据库是通过Tensorflow导入的。
我的x_test的形状是10000、28、28。10000表示输入数量,28x28表示高度和宽度。
我的错误是这样的:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-55-a6dbf7a3d2aa> in <module>
1 layer_dims = [784, 50, 20, 10]
----> 2 parameters = model(x_test , y_test, layer_dims)
<ipython-input-35-e0593be872fa> in model(X, Y, layers_dims, optimizer, learning_rate, mini_batch_size, mainActiv, lastActiv, num_epochs, beta, beta1, beta2, epsilon)
28 for minibatch in minibatches:
29 (minibatch_X, minibatch_Y) = minibatch
---> 30 a3, cache = forward_propagation(minibatch_X, minibatch_Y, parameters)
31 cost = compute_cost(a3, minibatch_Y)
32 grads = L_model_backward(a3, Y, caches, mainActiv)
<ipython-input-15-fc8fba0d23d7> in forward_propagation(X, Y, parameters)
7 A_prev = A
8 print("A shape = " + str(A.shape))
----> 9 A, cache = lin_activ_forward(A_prev, parameters["W" + str(l)], parameters["b" + str(l)], activation = "relu")
10 caches.append(cache)
11 AL, cache = lin_activ_forward(A, parameters["W" + str(L)], parameters["b" + str(L)], activation = "sigmoid")
<ipython-input-14-760f9d3070ba> in lin_activ_forward(A_prev, W, b, activation)
9 print("activ b" + str(b.shape))
10
---> 11 Z, lin_cache = lin_feedforward(A_prev, W, b)
12 print("activ Z" + str(Z.shape))
13 A, activ_cache = relu(Z)
<ipython-input-54-9a032d2cf624> in lin_feedforward(A_prev, W, b)
1 def lin_feedforward(A_prev, W, b):
2 #A_prev - aktivace z předchozích vrstev
----> 3 Z = np.dot(A_prev,W) +b #maybe multiply here???
4 assert(Z.shape == (W.shape[0], A_prev.shape[1]))
5 print("W1 shape" + str(W1.shape))
ValueError: shapes (64,28,28) and (784,50) not aligned: 28 (dim 2) != 784 (dim 0)
我想主要的错误来自np.dot乘法本身,因为我的变量确实有错误的形状。关键是我不知道如何解决此问题?我了解到,输入层应该是784个输入(每个像素28x28),对吗?如何在3维矩阵和2维矩阵上使用点积?我对广播了解得很少,但是我找不到解决办法
感谢您的任何建议!