写了个多层感知器,用bp梯度下降更新,拟合正弦曲线,效果凑合。
# - * -编码:utf - 8 - * 进口numpy np 进口matplotlib。pyplot作为plt def sigmod (z): 返回1.0/(1.0 + np.exp (- z)) 中长期规划类(对象): def __init__(自我,lr=0.1, lda=0.0, te=1 e-5,时代=100,大?None): 自我。learningRate=lr 自我。lambda_=lda 自我。thresholdError=te 自我。maxEpoch=时代 自我。大?大小 自我。W=[] 自我。b=[] self.init () def init(自我): 因为我在xrange (len (self.size) 1): self.W.append (np.mat (np.random.uniform(-0.5, 0.5,大?(自我。大小(i + 1), self.size[我])))) self.b.append (np.mat (np.random.uniform(-0.5, 0.5,大?(自我。大小(i + 1), 1)))) def forwardPropagation(自我,项=None):=(项) 清洁剂的xrange (len (self.W)): a.append (sigmod (self.W [wIndex] * [1] + self.b(清洁剂))) ”“” 打印”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -” 因为我在一个: 打印i.shape, 打印 因为我在self.W: 打印i.shape, 打印 因为我在self.b: 打印i.shape, 打印 打印”- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -” ”“” 返回一个 def反向传播(自我,标签=,=None): #打印“反向传播- - - - - - - - - - - - - - - - - - - - -开始” δ=[([1]标签)* [1]* (1.0 - [1])) 因为我在xrange (len (self.W) 1): 美国广播公司(abc)=np。乘以(1 a[我],[我]) cba=np.multiply (self.W[我]。T *δ[1],abc) delta.append (cba) ”“” 打印“+ + + + + + + + + + + + + +δ+ + + + + + + + + + + + + + + + + + + +” 打印“len(δ):len(δ) 在三角洲:二世 打印ii.shape, 打印“\ n=======================================" ”“” 对j xrange (len(δ)): 广告=δ[j] * [2 j] .T #打印self.W [1-j]。形状、ads.shape self.b [1-j]。形状,δ[j] .shape 自我。W [1-j]=self.W [1-j] -self.learningRate *(广告+ self.lambda_ * self.W [1-j]) 自我。b [1-j]=self.b [1-j] -self.learningRate *δ[j] “打印”=======================================1234 " 在ij self.b: 打印ij.shape, 打印 ”“” #打印“反向传播- - - - - - - - - - - - - - - - - - - - -完成” 错误=0.5 *([1]标签)* * 2 返回错误 def火车(自我,input_=None,目标=没有显示=10): 对ep xrange (self.maxEpoch): 错误=[] 对于itemIndex xrange (input_.shape [1]): 一个=自我。forwardPropagation (input_ [: itemIndex]) e=自我。反向传播(目标:,itemIndex,) 错误。追加(e [0]) tt=总和(错误)/len(错误) 如果tt & lt;self.thresholdError: 打印”完成{0}:“.format (ep), tt 返回 elif ep %显示==0: 打印”时代{0}:“.format (ep), tt def sim(自我,inp=None): 返回self.forwardPropagation(项=inp) [1] if __name__==癬_main__”: tt=np。不等(0、6.28、0.01) 标签=np.zeros_like (tt) 打印tt.shape ”“” 阿宝在xrange (tt.shape [0]): 如果tt (po) & lt;4: 标签(po)=0.0 elif 8比;tt (po)祝辞=4: 标签(po)=0.25 elif 12比;tt (po)祝辞=8: 标签(po)=0.5 elif 16比;tt (po)祝辞=12: 标签(po)=0.75 其他: 标签(po)=1.0 ”“” tt=np.mat (tt) 标签=np.sin (tt) * 0.5 + 0.5 标签=np.mat(标签) 中长期规划模型=(lr=0.2, lda=0.0, te=1 e-5,时代=500,大?[第1、6、6、6、1)) 打印tt。形状,labels.shape 打印len (model.W), len (model.b) 打印 模型。火车(input_=tt,目标=标签,显示=10) 西姆斯=[模型。sim (tt [: idx])(0,0)为idx xrange (tt.shape [1])) xx=tt.tolist () [0] plt.figure () plt。情节(xx labels.tolist () [0], xx,西姆斯,“r”) plt.show ()
效果图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。