简单的单隐层神经网络实现,需要注意的是,隐层的结点个数需要经过多次试验获得最佳参数,如果设置太多可能引起过拟合问题,目前就简单实现其原理。
import numpy as np
class BP_network:
def __init__(self):
###初始化变量###
###每一层的节点数
self.input_node=0 #输入层
self.hide_node=0 #隐层
self.output_node=0 #输出层
###初始化每一层的输出变量
self.input_out=[]
self.hide_out=[]
self.output_out=[]
###初始化输入层到隐层与隐层到输出层的权值
self.ih_weight=[]
self.ho_weight=[]
###初始化隐层与输出层的阈值
self.hide_threshold=[]
self.output_threshold=[]
####定义可选的激活函数与导数
self.fun={
'Sigmoid':Sigmoid,
'SigmoidDerivate':SigmoidDerivate
}
def CreateNN(self,ni,nh,no,actiFun):
"""
创建一个神经网络结构并且初始化参数
ni,nh,no为三层节点个数
actiFun:string,为激活函数
"""
###给各层节点数赋值
self.input_node=ni
self.hide_node=nh
self.output_node=no
###给各层输出的值赋初值
self.input_out=np.zeros(self.input_node) #赋0 [0,0,0.......,0]
self.hide_out=np.zeros(self.hide_node)
self.output_out=np.zeros(self.output_node)
###给两层之间的权值赋初值
self.ih_weight=np.zeros([self.input_node,self.hide_node])
self.ho_weight=np.zeros([self.hide_node,self.output_n