几个概念
1、BP神经网络是指按照误差反向传播算法训练的多层前馈神经网络,一般结构如下,包含输入层,隐层,输出层
2、正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出不符,则转入误差的反向传播阶段。
3、反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
4、S型非线性激活函数sigmoid ,优点是值域在0和1之间,可表示概率;单调递增;连续可导。
代码解析
import math
import random
import string
random.seed(0)
# calculate a random number where: a <= rand < b
def rand(a, b):
return (b-a)*random.random() + a
# Make a matrix (we could use NumPy to speed this up)
def makeMatrix(I, J, fill=0.0):#构建矩阵,实际表示两点之间连线权值
m = []
for i in range(I):
m.append([fill]*J)
return m
# our sigmoid function, tanh is a little nicer than the standard 1/(1+e^-x)
def sigmoid(x):#非线性激活函数
return math.tanh(x)
# derivative of our sigmoid function, in terms of the output (i.e. y)
def dsigmoid(y):#激活函数的导数
return 1.0 - y**2
class NN:
def __init__(self, ni, nh, no):
# number