首页 > 编程知识 正文

bp神经网络算法原理公式,bp神经网络权值调整

时间:2023-05-05 17:28:28 阅读:18326 作者:4515

动图长

代码--- coding : utf-8-- *-importnumpyasnpimportmatplotlib.pyplotaspypoutput=' output ' sum=' sum ' input=args : v (矩阵) :参数returns :矩阵:函数值。 ' ' ' return1/(1NP.exp(-v ) ) def af_d(v ) v ) : ' '激励函数的导数。 args : v (矩阵) :参数returns :矩阵:函数值。 ' ' d=af(v ) return np.multiply(d ) d,1.0-d ) defloss ) y_hat,y ) : #交叉熵损失函数L(y^, y )=-ylog(y^ )-)1args : y _ hat (y (矩阵) :神经网络输出层返回值y (矩阵) :模型输出Returns: float: ' ' ' ret=[] row_count, col _ count=y _ hat.shapeforrow _ indexinrange (row _ count ) 3360 y _ hat _ row _ t NP.log (y _ hat _ row _ t ) NP.log(1-y_hat_row_t ) ) RES=NP.sum ) left-right ) ret.append ) RES ) passreturnret#-NP.sum ) Returns: list:初始权重。 ' ' ' weights=[]depth=len(widths ) forIinrange(1, depth ) :miu=NP.sqrt(1/widths ) I ) ) w widths[i-1] 1)随机初始化weights.appenend,以避免权重方差、控制权重分布过于零散)长度为神经网络深度-1(减去输入层),各层行数为本层宽度n,列数为前层宽度m 1 (加上偏移值的args:input(matrix ) :根层的输入值, 每行是上一层一个神经元的输出weights ) matrix ) :基本层权重Returns: dict:基本层输入值,包括基本层的加权求和和非线性变换结果' ' iab=NP.iin axis=0) #input头部加偏的sums=NP.dot ) weights,iab ) #加权加法RR )的SUM: sums,output : RES } defbp _ layer inputs ) 3360 " (单层BPargs3360exp )矩阵) 3360每行, 本层一个神经元的模型输出weights (矩阵) :本层权重sum (矩阵) :本层权重求和结果inputs (矩阵) :本层输入值)包括追加输入) returns : dicics 1delta_weights=NP.dot(exp,inputs.T ),学习率# grad=af_d ) sum (grad不是n*1propagate=NP.dot的exp ) #关闭propagate ) )=f ' ) s ) w^T*^ 1) return{EXPECT: propagate,args:data(DICT ) :是包含输入和模型输出的weights (lt )

' ' depth=len(weights ) FP _ results=[ ] input=data [ input ] foriinrange (depth ) 3360FP_res=FP_layer ) ' weights [ I ] # FP _ results.append (FP _ RES ) input=FP _ RES [ output ] pass delta _ weights=[ ] exp=input y-y BP_RES=BP_layer ) EXP, weiger FP _ results [ I ] [ input ] (BP exp=BP _ RES [ expect ] #反向传播Delta_weights.append ) BP_res[weight] )为: weight 3360 delta _ weights } times=3000 eta=0.25 #学习率data _ inputs=[ 1,0 ],[ 1,1 ]0) )异或的数据data _ outputs=[0](data_size=len(data_inputs ) weights=init_weighhts 1) depth=len(weights ) result={LOST: [],} end3360[]}fortinrange(times ) : delta _ weights=[ ] RES=[ ] fordata _ indexinrange ) data_size ) : #每个组).t, expect:NP.mat ) ) data _ outputs [ data ] weights (delta _ weights.append (fit _ RES [ weight ] ) RES.append )=RES result [ end ]=RES lost=loss (NP.mat (RES ).t, NP.mat )为data_outputs ).t ) resulult )存储神经网络输出的lost ) for delta _ weightindelta _ weights 3360 forlayerindinds 索引]权重层(#权重更新和学习率passpasspassprint(((033(31m ),)训练前输出)、NP.mat (result (开始) ).t、) (() )画画看损失pyp.show ) #展示插图并给出训练前的输出([0. 57172220.55289663.61069527.63006013 ]训练后

用tensorflow实现代码更短:戳我跳

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。