Python ValueError:形状(64,28,28)和(784,50)未对齐:28(尺寸2)!=784(尺寸0)

Python ValueError:形状(64,28,28)和(784,50)未对齐:28(尺寸2)!=784(尺寸0),python,numpy,neural-network,Python,Numpy,Neural Network,我正在尝试创建我的第一个神经网络。我想从我的神经网络预测28x28输入上的数字(我使用的是MNIST数据库)。数据库通过Tensorflow导入 我的x_测试的形状是10000,28,28。10000表示输入的数量,28x28表示高度和宽度 我的错误是: --------------------------------------------------------------------------- ValueError Trac

我正在尝试创建我的第一个神经网络。我想从我的神经网络预测28x28输入上的数字(我使用的是MNIST数据库)。数据库通过Tensorflow导入

我的x_测试的形状是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)

---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
1层厚度=[784,50,20,10]
---->2个参数=模型(x_测试、y_测试、图层尺寸)
在模型中(X、Y、层尺寸、优化器、学习率、最小批量大小、主活动、最后活动、数字时代、β、β1、β2、ε)
28对于小批量中的小批量:
29(小批量X,小批量Y)=小批量
--->30 a3,缓存=正向传播(小批量X,小批量Y,参数)
31成本=计算成本(a3,小批量)
32梯度=L_模型_向后(a3,Y,缓存,主活动)
正向传播中(X,Y,参数)
7 A_prev=A
8打印(“A形状=“+str(A形状))
---->9 A,缓存=lin_activ_forward(A_prev,参数[“W”+str(l)],参数[“b”+str(l)],激活=“relu”)
10个缓存。追加(缓存)
11 AL,cache=lin\u activ\u forward(A,参数[“W”+str(L)],参数[“b”+str(L)],activation=“sigmoid”)
林内活动向前(A、W、b、激活)
9打印(“活动b”+str(b形状))
10
--->11 Z,lin_缓存=lin_前馈(A_prev,W,b)
12打印(“活动Z”+str(Z形))
13 A,活动缓存=relu(Z)
林内前馈(A_-prev,W,b)
1 def lin_前馈(A_prev,W,b):
2.A#u prev-aktivace z předchozích vrstev
---->3z=np.dot(A_prev,W)+b#可能在这里相乘???
4断言(Z.shape==(W.shape[0],A_prev.shape[1]))
5打印(“W1形状”+str(W1形状))
ValueError:形状(64,28,28)和(784,50)未对齐:28(尺寸2)!=784(尺寸0)
我想主要的错误来自于np.dot乘法本身,因为我的变量的形状是错误的。关键是我不知道如何解决这个问题?我了解到,输入层应该是784个输入(每个像素28x28个输入),对吗?如何在三维矩阵和二维矩阵上使用点积?我对广播略知一二,但我找不到解决这个问题的办法


谢谢你的建议

在没有看到您的代码的情况下,我不能确定,但您可能只需要重新调整输入,如
x_test=x_test。重新调整(-1,28**2)
。你试过了吗?28*28==784。因此,可以将(64,28,28)数组的形状改为(64784)。该数组将
与(784,50)产生一个(64,50)数组。感谢你们两位!你的回答真的帮助我解决了这个问题!在没有看到您的代码的情况下,我不能确定,但您可能只需要重新调整输入,如
x_test=x_test。重新调整(-1,28**2)
。你试过了吗?28*28==784。因此,可以将(64,28,28)数组的形状改为(64784)。该数组将
与(784,50)产生一个(64,50)数组。感谢你们两位!你的回答真的帮助我解决了这个问题!