使用预先训练的权重和偏差来预测自己的图像无法正常工作

问题描述 投票:0回答:1

我正在尝试使用已经在MNIST数据库上训练的反向传播技术从头将自己的图像导入神经网络。

代码:

#X - input image
#W1/W2 - Weights
#b1/b2 - biases

def predict(X, W1, W2, b1, b2):
    Z1 = np.dot(W1, X.T) + b1
    A1 = tanh(Z1)
    Z2 = np.dot(W2, A1) + b2
    A2 = softmax(Z2)
    prediction = np.argmax(A2, axis = 0)
    return prediction
chosen_img = x_test[3]

output = predict(chosen_img, W1, W2, b1, b2)
myImg = chosen_img.reshape((28,28))
print(output)

哪里可能是错误

当我尝试从MNIST数据库本身输入图像时,它仍然不起作用。例如,可以将其输出为output[7 2 2 7 7 2 2 7 1 2 7 7 2 2 2 7 7 7 7 7 7 7 2 2 7 2 2 2]

请注意,我在完整的NN中使用的是same代码,因此前馈是相同的,猜测是相同的,权重和偏倚是相同的-并且确实可以在完整版中使用,所以我真的不明白,为什么它现在不能工作。

我想念什么吗?感谢您的帮助!

python neural-network mnist
1个回答
0
投票

TL; DR:您正在构建完全连接的网络,而不是CNN,您的输入应为形状为28*28 = 784的一维张量,而输出张量应为形状为10的一维。

根据问题描述,您正在尝试构建神经网络来对MNIST个数字进行分类。对?因此,您的网络应将形状为28x28的输入映射到形状为10的输出矢量(每个数字类的预测概率:0,1,... 9),然后应用argmax以获得预测值。

现在,看看您的output形状:

# output array from the above issue:
output = np.array([7, 2, 2, 7, 7, 2, 2, 7, 1, 2, 7, 7, 2, 2, 2, 7, 7, 7, 7, 7, 7, 7, 2, 2, 7, 2, 2, 2])
print(output.shape)

输出:

(28,)

[28 vs 10。甚至在应用argmax之前,输出形状为28x28。因此,这绝对不是我们想要实现的目标。

问题在前进。您正在构建经典的全连接层,但没有将28x28的2D输入张量重塑为形状784的1D张量。如果要处理2D输入,则应使用CNN架构。

因此,要解决您的问题,您应该修正输入的所有形状以及偏差和权重。

© www.soinside.com 2019 - 2024. All rights reserved.