[笔记]最简单的神经网络

来源:互联网 发布:什么是淘宝死店 编辑:程序博客网 时间:2024/06/06 09:50

按照网上的教程一步步,慢慢地做神经网络

第一次做,很简单的那种,网上的教程很多

测试数据集:

x:            y:

0 0 1       0

1 1 1       1

1 0 1       1

0 1 1       0

用了sigmoid函数作为作用函数

这个函数在(0,1)上连续

是比较常用的作用函数

syn0是权重矩阵

迭代过程就是对于权重的一个修正过程

np.dot(L0,syn0)是矩阵乘法得到(4*1)的矩阵

放到nonlin上之后,就对每个元素都做了一个作用(这个作用取决于作用函数)

这个作用过后得到新的值,就是所谓的L1

L1_Errror 就是 误差值,属于(-1,1)

(4*1)size

将L1放到那个求导之后的函数中

L1_Erroe 和 f'(L1)之间发生的其实是(.*)

即对应位置相乘

从而得到要处理的delte

delte和数据集的矩阵发生矩阵乘法,再与原权重集合进行相加之后,就得到了我们想要的新权重集合

(非常抱歉,我也不是很理解这个为什么这个权重集合要这样改变,如果您有相关的信息,麻烦您在评论区给予指引,不胜感激)


按照网上教程打的代码,如下:

import numpy as npdef nonlin(x, deriv=False):    if deriv:        return x*(1 - x)    return 1/(1+np.exp(-x))X = np.array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])Y = np.array([[0, 1, 1, 0]]).Tnp.random.seed(1)syn0 = 2*np.random.random((3, 1)) - 1 # 得到的数据为[-1,1)# 迭代次数for iter in range(10000):    L0 = X    L1 = nonlin(np.dot(L0, syn0))    L1_Error = Y - L1    L1_delta = L1_Error * nonlin(L1, True)    syn0 += np.dot(L0.T, L1_delta)print(L1)