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

做汽车网可参考网站手机制作手书app软件

做汽车网可参考网站,手机制作手书app软件,微信个人商城网站模板免费下载,wordpress文章无法中文版我们已经学习了误差反向传播法的好几种实例及其实现,现在我们可以开始构建神经网络了。 七、误差反向传播法的实现 本章我们通过已经实现的层来实现神经网络的构建。 7.1 神经网络学习的全貌图 前提:神经网络中有合适的权重和偏置,调整权…

我们已经学习了误差反向传播法的好几种实例及其实现,现在我们可以开始构建神经网络了。

七、误差反向传播法的实现

本章我们通过已经实现的层来实现神经网络的构建。

7.1 神经网络学习的全貌图

前提:神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程被称为学习,神经网络学习分为下面四个步骤:

1、minibatch

从训练数据中随机选择一部分数据

2、计算梯度

计算损失函数关于各个权重参数的梯度

3、更新参数

将权重参数沿梯度方向进行微小的更新

4、重复

重复步骤1、2和3.

而我们之前学习的误差反向传播法会在步骤2出现,我们之前是采用数值微分求得梯度,虽然计算简单,但耗费较多时间。误差反向传播法却可以高效地求出计算梯度。

7.2 误差反向传播法的神经网络实现

现在来进行神经网络的实现,这里把两层神经网络实现为TwoLayerNet。首先我们整理一下类的实例变量和方法:

类实例变量
类实现方法

这个类的实现会比较长,但内容和之前学习的算法有很多共同的地方,不同的就是这里使用了很多之前实现过的层。通过层的实现,获得识别结果的处理和计算梯度的处理只需通过层之间的传递就可以了。下面我们来实现这个类:

import sys,os
sys.path.append(os.pardir)
import numpy as np
from common.layers import *
from common.gradient import numerical_gradient
from collections import OrderedDictclass TwoLayerNet:def __init__(self, input_size, hidden_size, output_size,weight_init_std=0.01):# 初始化权重self.params = {}self.params['W1'] = weight_init_std * \np.random.randn(input_size, hidden_size)self.params['b1'] = np.zeros(hidden_size)self.params['W2'] = weight_init_std * \np.random.randn(hidden_size, output_size)self.params['b2'] = np.zeros(output_size)# 生成层self.layers = OrderedDict()self.layers['Affine1'] = \Affine(self.params['W1'], self.params['b1'])self.layers['Relu1'] = Relu()self.layers['Affine2'] = \Affine(self.params['W2'], self.params['b2'])self.lastLayer = SoftmaxWithLoss()def predict(self, x):for layer in self.layers.values():x = layer.forward(x)return x# x: 输入数据, t:监督数据def loss(self, x, t):y = self.predict(x)return self.lastLayer.forward(y, t)def accuracy(self, x, t):y = self.predict(x)y = np.argmax(y, axis=1)if t.ndim != 1 : t = np.argmax(t, axis=1)accuracy = np.sum(y == t) / float(x.shape[0])return accuracy# x: 输入数据, t:监督数据def numerical_gradient(self, x, t):loss_W = lambda W: self.loss(x, t)grads = {}grads['W1'] = numerical_gradient(loss_W, self.params['W1'])grads['b1'] = numerical_gradient(loss_W, self.params['b1'])grads['W2'] = numerical_gradient(loss_W, self.params['W2'])grads['b2'] = numerical_gradient(loss_W, self.params['b2'])return gradsdef gradient(self, x, t):# forwardself.loss(x, t)# backwarddout = 1dout = self.lastLayer.backward(dout)layers = list(self.layers.values())layers.reverse()for layer in layers:dout = layer.backward(dout)# 设定grads = {}grads['W1'] = self.layers['Affine1'].dWgrads['b1'] = self.layers['Affine1'].dbgrads['W2'] = self.layers['Affine2'].dWgrads['b2'] = self.layers['Affine2'].dbreturn grads

请注意这个实现中的粗体字代码部分,尤其是将神经网络的层保存为 OrderedDict这一点非常重要。OrderedDict是有序字典,“有序”是指它可以 记住向字典里添加元素的顺序。因此,神经网络的正向传播只需按照添加元 素的顺序调用各层的forward()方法就可以完成处理,而反向传播只需要按 照相反的顺序调用各层即可。因为Affine层和ReLU层的内部会正确处理正 向传播和反向传播,所以这里要做的事情仅仅是以正确的顺序连接各层,再按顺序(或者逆序)调用各层。

像这样通过将神经网络的组成元素以层的方式实现,可以轻松地构建神经网络。这个用层进行模块化的实现具有很大优点。因为想另外构建一个神 经网络(比如5层、10层、20层……的大的神经网络)时,只需像组装乐高 积木那样添加必要的层就可以了。之后,通过各个层内部实现的正向传播和 反向传播,就可以正确计算进行识别处理或学习所需的梯度。

http://www.dtcms.com/wzjs/585117.html

相关文章:

  • 建站软件移动版淮北建设网站
  • 免费咨询律师网站单页网站域名
  • 邹平网站设计济南智能网站建设哪家便宜
  • 抚顺网站制作甘肃模板型网站建设
  • 阿里云怎么放多个网站怎么提高网站关键字排名
  • 营销网站如何建设seo网络优化公司
  • 沈阳微信网站开发棋牌app开发公司
  • 深圳网站建设ue公司网站怎么突然多了好多友情链接如何删除
  • 手机网站seo免费软件邮箱qq登录入口
  • 做策划的人经常浏览的网站成都企业网站商城定制
  • 电子商务网站如何进行维护和推广seo包括什么
  • 淄博百度网站建设批量入侵wordpress
  • 个人备案网站名称大全昆明市城市建设档案馆网站
  • 电信网站空间做网站意义
  • 桥头网站仿做大连中山区网站建设
  • 网站的收费窗口怎么做中国著名的外贸公司
  • 北京市工程建设信息交易网站东庄水利枢纽建设公司网站
  • 网络文学网站开发关键词优化难易
  • 淮安设计网站wordpress打分免插件
  • 建设厅网站总经济师是干什么的m2型虚拟主机带宽 网站
  • 怎么用joomla做网站wordpress提供restful
  • 网站开发属于什么经营范围太原网站开发培训
  • 网站建设需求调研通知描述一下网站建设的基本流程
  • 新乡门户网站建设方案网络营销的含义的理解
  • 深圳营销型网站策划自己建设淘宝客网站需要备案么
  • 买网站多少钱社交做的最好的网站有哪些
  • 恩施网站优化建立一个网址需要多少钱
  • 网站风格类型有哪些乐趣浏览器app下载
  • 网站建设经验购物网站建设机构
  • 重点专业建设网站 建设方案哪家建网站