当前位置: 首页 > news >正文

建设网站广州市佛山企业快速建站

建设网站广州市,佛山企业快速建站,青海省电话黄页,有网站源码怎么搭建网站BP算法就是反向传播,要输入的数据经过一个前向传播会得到一个输出,但是由于权重的原因,所以其输出会和你想要的输出有差距,这个时候就需要进行反向传播,利用梯度下降,对所有的权重进行更新,这样…

BP算法就是反向传播,要输入的数据经过一个前向传播会得到一个输出,但是由于权重的原因,所以其输出会和你想要的输出有差距,这个时候就需要进行反向传播,利用梯度下降,对所有的权重进行更新,这样的话在进行前向传播就会发现其输出和你想要的输出越来越接近了。

# 
import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt# 生成权重以及偏执项layers_dim代表每层的神经元个数,
#比如[2,3,1]代表一个三成的网络,输入为2层,中间为3层输出为1层
def init_parameters(layers_dim):L = len(layers_dim)parameters ={}for i in range(1,L):parameters["w"+str(i)] = np.random.random([layers_dim[i],layers_dim[i-1]])parameters["b"+str(i)] = np.zeros((layers_dim[i],1))return parametersdef sigmoid(z):return 1.0/(1.0+np.exp(-z))# sigmoid的导函数
def sigmoid_prime(z):return sigmoid(z) * (1-sigmoid(z))# 前向传播,需要用到一个输入x以及所有的权重以及偏执项,都在parameters这个字典里面存储
# 最后返回会返回一个caches里面包含的 是各层的a和z,a[layers]就是最终的输出
def forward(x,parameters):a = []z = []caches = {}a.append(x)z.append(x)layers = len(parameters)//2# 前面都要用sigmoidfor i in range(1,layers):z_temp =parameters["w"+str(i)].dot(x) + parameters["b"+str(i)]z.append(z_temp)a.append(sigmoid(z_temp))# 最后一层不用sigmoidz_temp = parameters["w"+str(layers)].dot(a[layers-1]) + parameters["b"+str(layers)]z.append(z_temp)a.append(z_temp)caches["z"] = zcaches["a"] = a    return  caches,a[layers]# 反向传播,parameters里面存储的是所有的各层的权重以及偏执,caches里面存储各层的a和z
# al是经过反向传播后最后一层的输出,y代表真实值
# 返回的grades代表着误差对所有的w以及b的导数
def backward(parameters,caches,al,y):layers = len(parameters)//2grades = {}m = y.shape[1]# 假设最后一层不经历激活函数# 就是按照上面的图片中的公式写的grades["dz"+str(layers)] = al - ygrades["dw"+str(layers)] = grades["dz"+str(layers)].dot(caches["a"][layers-1].T) /mgrades["db"+str(layers)] = np.sum(grades["dz"+str(layers)],axis = 1,keepdims = True) /m# 前面全部都是sigmoid激活for i in reversed(range(1,layers)):grades["dz"+str(i)] = parameters["w"+str(i+1)].T.dot(grades["dz"+str(i+1)]) * sigmoid_prime(caches["z"][i])grades["dw"+str(i)] = grades["dz"+str(i)].dot(caches["a"][i-1].T)/mgrades["db"+str(i)] = np.sum(grades["dz"+str(i)],axis = 1,keepdims = True) /mreturn grades   # 就是把其所有的权重以及偏执都更新一下
def update_grades(parameters,grades,learning_rate):layers = len(parameters)//2for i in range(1,layers+1):parameters["w"+str(i)] -= learning_rate * grades["dw"+str(i)]parameters["b"+str(i)] -= learning_rate * grades["db"+str(i)]return parameters
# 计算误差值
def compute_loss(al,y):return np.mean(np.square(al-y))# 加载数据
def load_data():"""加载数据集"""x = np.arange(0.0,1.0,0.01)y =20* np.sin(2*np.pi*x)# 数据可视化plt.scatter(x,y)return x,y
#进行测试
x,y = load_data()
x = x.reshape(1,100)
y = y.reshape(1,100)
plt.scatter(x,y)
parameters = init_parameters([1,25,1])
al = 0
for i in range(4000):caches,al = forward(x, parameters)grades = backward(parameters, caches, al, y)parameters = update_grades(parameters, grades, learning_rate= 0.3)if i %100 ==0:print(compute_loss(al, y))
plt.scatter(x,al)
plt.show()

运行结果:

在这里插入图片描述

http://www.yayakq.cn/news/641896/

相关文章:

  • 循化网站建设公司无锡网站建设 app
  • 深圳做网站最好的公司烟台建站软件
  • 营销型网站建设实战》泰州seo公司
  • 厦门网站建设手机大型手游网络游戏排行榜前十
  • wordpress用户站点精品网站建设费用 磐石网络
  • 长春网站开发招聘漂亮的门户网站
  • 网站建设合同属于什么印花税跨境电商平台有哪些上市公司
  • 网站运营和seo的区别成都公布最新轨迹
  • 上饶做网站如何打造电商平台
  • 网站主机空间价格深圳做积分商城网站建设
  • 爬闪数媒 网站建设wordpress选择windows还是
  • 廊坊网站建设-商昊网络上海网站策划
  • 管理外贸网站模板网站信息内容建设实施办法
  • 网站开发的团队有哪些有网页源码 怎么做网站
  • 免费申请关键字优化工具
  • 仿站教程网站上海网站建设
  • 家装网站建设案例网店美工岗位职责
  • 免费建站自己的网址竹子建站教程
  • aspcms是网站什么漏洞免费企业信息查询
  • 有没有好的ppt网站做参考的wordpress自带的域名邮
  • 珠海正规网站制作哪家好下载应用
  • 做网站专家上海派沃设计
  • 定制网站建设济南营销技巧电影
  • 网站的联系我们怎么做北京建站推广
  • 学网站开发培训怎么建设网站网页
  • 江西省楚天建设集团有限公司网站深圳网站建设公司哪家
  • 商城网站建设策划书域名ip查询查网址
  • 四川省建设网站电子签章wordpress模板编写
  • 网站专业术语中 seo意思是长沙电商网站开发
  • 建设电子商务网站的步骤电脑优化用什么软件好