为什么要这么做呢,这里举一个例子:预测steep一词中的下一个字母,为了简化问题,可假设整个字母表由 S、T、E 和 P 组成,从正常的前馈网络开始,传入字母S期望的输出为T,传入T期望获得E,现在传入E,在这个词中E后面跟另一个E或P,而这里显示的网络没有足够的信息来决定预测哪一个字母是正确的结果。要解决这个问题,需要获得关于字母历史序列的信息,一个很显然的方法是将上一步的隐藏层输出路由到下一个隐藏层的输入中,即将隐藏层输出信息做为下一隐藏层的输入信息的一部分。所以现在,当网络看到E时,由于隐藏层之间信息的路由,网络知道字母序列在前面看到了S、T和E,所以下一个字母应该为E,就不会在E和P之间迷惑了,这就是循环神经网络。
def forward(self, inputArray):
for i in range(len(self.m_layers)):
inputArray = self.m_layers.forward(inputArray)
for i in range(self.m_layers[-1].m_iNodeNum):
self.m_dOutputArray = self.m_outputActivator.forward(np.dot(self.m_layers[-1].m_NodeSet.m_dOutputArray, self.m_WOutputLayer))
return np.round(self.m_dOutputArray)
if(len(self.m_layers)>=2):
for i in range(len(self.m_layers)-2,-1,-1):
delta = self.m_layers.backward(delta, self.m_layers[i+1].m_WForPreLayer)
return err