因此,按照本章末尾的示例,我生成了一个用于数字识别的神经网络,它(令人惊讶地)准确。它是一个784->100->10前馈网络,具有一个输入层、一个隐藏层和一个输出层。
例如,这是一个输入图像(重新整形为28x28图像):
跑完第一层,里面有一个sigmoid激活函数:
first_layer_output = sigmoid(np.dot(weights[0],input_image)+biases[0])
我得到以下结果(减少到 100 像素,显示为10x10图像):
然后,我生成最终输出:
last_layer_output = sigmoid(np.dot(weights[1],first_layer_output)+biases[1])
具有以下输出:
基本上它做出了正确的猜测。如何直观地解释输入图像发生了什么?有没有办法直观地表示每个神经元正在“寻找”什么?我使用了Tensorflow Playground,这些图层具有直观的意义。例如,像这张图这样简单的东西,我可以看到隐藏层的前两个神经元基本上只是前两个输入神经元的正负平均值:
在类似的尝试中,我想看看给定神经元的权重是如何改变我的图像的,所以我对输出层中权重最大的神经元的像素进行了逐个元素的乘法运算(weights[1][3]具有权重对于数字 3) 对应的输出层:
pos_n = weights[1][3].argsort()[-1]
e_by_e = np.multiply(input_image.reshape((28,28)),weights[0][pos_n].reshape((28,28)))
plt.imshow(e_by_e)
解释图像的正确方法是该神经元对红色像素的权重为正(根据该颜色图,红色为高),相反地减少蓝色像素的权重?所以你可以想象“3”的顶部是负权重,而“3”上半部分的“拱形”是正权重?
这是pos_n单独的神经元:
编辑:根据@Lagerbaer 下面的建议,我训练了一个更简单的网络。该网络是一个前馈784->1->2网络,具有一个输入、一个隐藏和一个输出层,仅区分 MNIST 数据集中的 0 和 1。它的准确率 > 99%,这是权重的图像:






