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

Predicting own image with pretrained weights and biases doesn't work correctly

我正在尝试使用已在 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 中的代码相同,因此前馈是相同的,猜测是相同的,权重和偏差也是相同的 -而且它在那个完整版本中确实有效,所以我真的不明白,为什么它现在不能工作了。

我错过了什么吗? 感谢您的帮助!

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

根据问题描述,您正在尝试构建一个神经网络来 class 化 MNIST 数字。正确的?因此,您的网络应将形状 28x28 的输入映射到形状 10 的输出向量(每个数字的预测概率 class: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 对比 10。甚至在应用 argmax 之前,输出形状是 28x28。所以,这绝对不是我们想要达到的。

问题在前进。您正在构建 classic 全连接层,但您没有重塑 28x28 的 2D 输入张量到形状 784 的一维张量。如果你想处理 2D 输入,你应该使用 CNN 架构。

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