我试图在python中编写一个通用的神经网络。我能够编写一个带有两个隐藏层的神经网络(有一些困难)。但是当我尝试使用两层以上时,我失去了对链规则的追踪(在反向传播中更新权重)。这很难。我似乎不可能编写类似1000层的代码。我google了很多,但答案是模糊的或充满符号,很难弄清楚。对于多层神经网络,是否存在任何用于反向传播的通用形式,因此我可以轻松编码?
答案 0 :(得分:1)
2隐藏层神经网络尽可能通用。更新" second"的规则隐藏层(更深层,更接近输入)仅使用上一个隐藏层上的局部错误,您只需在以后的每个层中使用此规则,始终只使用前一个来计算渐变。
换句话说 - 没有广义的backprop ,backprop本身已经是一个泛化,是一种有效的线性复杂度,计算神经网络中的渐变方法网络使用递归方程。换句话说 - 你只需要知道渐变/"错误"就可以在第一层表达你的渐变。在层i-1上,以及连接这两者的权重。
可能你实际上指的是单个隐藏层案例,其中你有两组权重,一个连接输入隐藏,一个隐藏输出,因此缺少"如果权重在两个隐藏集之间怎么办?"。答案非常简单 - 使用为某个地方的隐藏图层定义的delta,之前为输出图层定义了它们。
特别是,backprop实际上在其伪代码中实际使用了任意数量的隐藏层: http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/
答案 1 :(得分:0)
我已经赞成了@ lejlot的回复;我做了更多的元答案。
(1)Backprop已在大多数范例中实现:您不对其进行编码;相反,你用每个图层的前向功能实例化它。
(2)如果您正在使用1000层,我非常希望您使用已建立的框架,例如Torch,TensorFlow,CNTK,Caffe,Theano等。如果是这样,您不要甚至对backprop层进行编码;相反,您构建拓扑并将整个结构作为backprop调用的参数。
(3)对于上述内容的一个巨大暗示是你的陈述"答案是......充满了难以弄清楚的符号。"这表明你没有数学背景来从头开始编写反向代码。这不是侮辱:我打赌你也不会编写自己的编译器,操作系统或设计自己的CPU。
(4)某些类型的NN层是非线性的(ReLU和Pool是最常见的),包括不连续的衍生物。这使得整体支持不可取。