根据this tutorial,Python
和Numpy
,我希望将MNIST
数据集训练到可以识别手写数字的神经网络。我理解逻辑,但我现在有一个问题。
在本教程中,测试用例为AND
逻辑门,由于数据量较少,因此工作正常。但我使用的是MNIST
数据库,每张图片都有28*28
维度,当我将每个图片转换为向量时,我有N*784
矩阵。如果我有784*1
矩阵作为weight matrix
,当我将它与输入矩阵相乘时,得到的数字将是非常小或非常大的数字(负数或正数),因为我使用{ {1}}激活功能,我的所有数据在第一个学习周期分为两个部分,1和0,但我需要收集缓慢的小数字。
例如,我在乘法后获得这些数字:Sigmoid
,-569.87541502
,第一个在218.62477264
激活函数中为0,第二个为1,并且没有培训空间和融合。所有这一切都是因为大量的数据导致这些数据的总和或非常小。
我使用这个技巧来产生比原始教程非常小的权重,但我得到相同的结果(我在想,因为这些是小数字,它们的总和可能非常大但我得到相同的结果) :
Sigmoid
我不知道如何克服这一点。
答案 0 :(得分:1)
如果输入像素在[0,255]范围内,最好将它们重新缩放为[0.0,1.0]。这在大多数情况下都足够了。
更高级的方法是使用batch normalization。
通过归一化,我的意思是权重矩阵的784维列向量中的每一个都应该具有固定的L2范数。对于简单的设置,您可以将它们标准化为1。
权重矩阵初始化是一个研究课题,例如使用glorot initialization往往会为深层网络显示更好的结果。