赞
踩
# 文中简单的 反向传播代码 python版本 import numpy as np def sigmoid(x): #激活函数,将得到的值归一化在某一范围内 return 1/(1+np.exp(-x)) #sigmoid函数: 把一个实数压缩至0到1之间。当z是非常大的正数时,g(z)会趋近于1,而z是非常小的负数时,则g(z)会趋近于0。 input1 = np.array([[0.35],[0.9],[0.58],[0.78]]) w1 = np.random.rand(3,4) # w1 随机初始权重 y=wx+b 利用梯度下降法优化权重 print('w1:',w1) # 通过调整 w使得一类x运算完之后都是0,另外一类x运算完都是1 w2 = np.random.rand(2,3) print('w2:',w2) real = np.array([[0.5],[0.7]]) for i in range(100): output1 = sigmoid(np.dot(w1,input1)) #中间层 output2 = sigmoid(np.dot(w2,output1)) #输出层 cost = np.square(real-output2)/2 #计算误差 dalta2 = output2*(1-output2)*(real-output2) #梯度 dalta1 = output1*(1-output1)*w2.T.dot(dalta2) #梯度 w2 = w2+dalta2.dot(output1.T) #更新w2 w1 = w1+dalta1.dot(input1.T) #更新w1 print(output1) print(output2) print(cost)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。