初学rnn(1)

来源:互联网 发布:广播系统 杰网络 编辑:程序博客网 时间:2024/05/29 15:30

先贴上原文网址:

点击打开链接

解释的已经很详细了,主要记录几点自己的想法:

X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])  y = np.array([[0,1,1,0]]).T  syn0 = 2*np.random.random((3,4)) - 1  syn1 = 2*np.random.random((4,1)) - 1  for j in xrange(60000):      l1 = 1/(1+np.exp(-(np.dot(X,syn0))))      l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))      l2_delta = (y - l2)*(l2*(1-l2))      l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))      syn1 += l1.T.dot(l2_delta)      syn0 += X.T.dot(l1_delta)  
开始的这个代码可以直接略过,这是最后一个例子的简化版。


前后两个例子代码的区别在于神经网络层数的不同,更直接点的说法就是:

第一个里面是把每个4*1向量看成一个整体,给每个整体一个固定的权值,按权值将它们加起来就得到最后的结果;

而第二个里面会先把每个1*3向量(每个整体输入中的第i个组成)按不同权重加起来(相当于得到新的输入),得到4*4的矩阵(每一列看成一个新的输入),然后在给每个新的输入一个权值,组合出输出。


0 0