我一直在努力用纯python编写一个神经网络。我在试着让它识别出我的图像。在
我想我在初始化权重时一定是做错了什么。在
我的假设是,因为MNIST数据是形状为28x28的数据,所以第一组权重应该是形状(28左右),最后一组权重的形状应该是(X,1),X是数据集中的类数。在
有一件事我很困惑,我的结束矩阵(下面的变量l5)有形状(28,1)。要使输出具有(9,1)的形状,我需要做什么?我已经打印了这些形状,并意识到我对NNs和线性代数的理解存在差距:
l5 shape: (28, 1)
l4 shape: (28, 9)
l3 shape: (28, 14)
l2 shape: (28, 21)
l1 shape: (28, 28)
我想理论上我可以做一个支持向量机(SVM),用一个矩阵(784,9)将形状(784,1)的(平坦)图像多重化,但我不确定这是否是唯一的方法,如果在现实中,我已经远远偏离了目标。在
以下代码基于本教程:http://iamtrask.github.io/2015/07/12/basic-python-network/:
^{pr2}$另外,我知道反向传播是根据适应度函数来寻找输出的梯度,并更新权重,以使误差最小化(我现在想起来可能会忽略它?)。我不明白为什么在更新权重和计算层错误时必须转换层。
我得到的当前错误如下,但我确信我的代码有其他错误
Traceback (most recent call last):
File "C:\Users\Username\Development\Python\updatedKernel.py", line 128, in <module>
main()
File "C:\Users\Username\Development\Python\updatedKernel.py", line 104, in main
l4_error = l5_delta.dot(syn4.T)
ValueError: shapes (28,9) and (1,9) not aligned: 9 (dim 1) != 1 (dim 0)
通常
输入(MNIST data)的形状是(nb_samples_in_bath,input_dimensions),其中input_dimensions=784=28*28
第一组权重的形状是(input_dimensions,hidden_dimensions),其中input_dimensions=784=28*28,hidden_dimensions由用户设置(通常应与输入的_维数的数量级相同)。在
第二个权重的形状是(隐式维数,nb_classes),其中nb_class=10(对于MNIST中的10位数字)。在
最终输出的形状应该是(nb_samples_in_batch,nb_classes)
相关问题 更多 >
编程相关推荐