Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的神经网络-权重矩阵形状和背部支撑有问题_Python_Matrix_Machine Learning_Neural Network_Backpropagation - Fatal编程技术网

Python中的神经网络-权重矩阵形状和背部支撑有问题

Python中的神经网络-权重矩阵形状和背部支撑有问题,python,matrix,machine-learning,neural-network,backpropagation,Python,Matrix,Machine Learning,Neural Network,Backpropagation,我一直在努力用纯python编写一个神经网络。我试图让它识别MNIST图像 我想我在初始化权重时一定做错了什么 我的假设是,因为MNIST数据是形状为28x28的数据,所以第一组权重应该是形状(28,某物),最后一组权重应该是形状(X,1),X是数据集中的类数 有一件事我很困惑,就是我的结束矩阵(下面的变量l5)有形状(28,1)我需要做什么才能使输出具有(9,1)的形状?我已经打印了这些形状,并意识到我对NNs和线性代数的理解存在差距: l5 shape: (28, 1) l4 shape:

我一直在努力用纯python编写一个神经网络。我试图让它识别MNIST图像

我想我在初始化权重时一定做错了什么

我的假设是,因为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,1)的(展平)图像与(784,9)的矩阵相乘,但我不确定这是否是唯一的方法,如果在现实中,我与我所得到的相去甚远

基于本教程的以下代码:

另外,我知道反向传播是根据适应度函数(我现在想起来可能遗漏了它?)找到输出的梯度并更新权重以最小化误差我不明白为什么在更新权重和计算层错误时必须转换层。

下面是我当前遇到的错误,但我确信我的代码还有其他错误

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) 
回溯(最近一次呼叫最后一次):
文件“C:\Users\Username\Development\Python\updatedKernel.py”,第128行,在
main()
文件“C:\Users\Username\Development\Python\updatedKernel.py”,第104行,在main中
l4_误差=l5_增量点(syn4.T)
ValueError:形状(28,9)和(1,9)未对齐:9(尺寸1)!=1(尺寸0)
通常

您输入的形状(MNIST数据)是(nb_samples_in_bacth,input_dimensions),其中input_dimensions=784=28*28

第一组权重的形状是(输入尺寸,隐藏尺寸),其中输入尺寸=784=28*28,隐藏尺寸由用户设置(通常应与输入尺寸大小相同)

第二个权重的形状是(隐藏维度,nb_类),其中nb_类=10(对于MNIST中的10位数字)


您的最终输出的形状应为(nb_样本,nb_类)

谢谢,我认为这会有所帮助。那么,在数组的形状中包含批量大小是必要的吗?我还能做什么(nb_批量采样、图像高度、图像宽度),而不是将图像“展平”到784?我问这个问题是因为我计划在某个时刻做卷积运算,我想如果数据被展平,你就不能做卷积运算,如果你在做卷积运算,你就不应该展平它。你是对的。
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)