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

上海网站建设自学华强北网站建设设计

上海网站建设自学,华强北网站建设设计,wordpress文章自动更新方法,网页如何设计7.5.1 训练深层网络 训练神经网络的实际问题#xff1a; 数据预处理的方式会对最终结果产生巨大影响。 训练时#xff0c;多层感知机的中间层变量可能具有更广的变化范围。 更深层的网络很复杂容易过拟合。 批量规范化对小批量的大小有要求#xff0c;只有批量大小足够…7.5.1 训练深层网络 训练神经网络的实际问题 数据预处理的方式会对最终结果产生巨大影响。 训练时多层感知机的中间层变量可能具有更广的变化范围。 更深层的网络很复杂容易过拟合。 批量规范化对小批量的大小有要求只有批量大小足够大时批量规范化才是有效的。 用 x ∈ B \boldsymbol{x}\in B x∈B 表示一个来自小批量 B B B 的输入$\hat{\boldsymbol{\mu}}_B $ 表示小批量 B B B 的样本均值 σ ^ B \hat{\boldsymbol{\sigma}}_B σ^B​ 表示小批量 B B B 的样本标准差批量规范化 BN 根据以下表达式转换 x \boldsymbol{x} x B N ( x ) γ ⊙ x μ ^ B σ ^ B β BN(\boldsymbol{x})\gamma\odot\frac{\boldsymbol{x}\hat{\boldsymbol{\mu}}_B}{\hat{\boldsymbol{\sigma}}_B}\beta BN(x)γ⊙σ^B​xμ^​B​​β 应用标准化后生成的小批量的均值为 0单位方差为 1。此外其中还包含与 x \boldsymbol{x} x 形状相同的拉伸参数 γ \gamma γ 和偏移参数 β \beta β。需要注意的是 γ \gamma γ 和 β \beta β 是需要与其他模型一起参与学习的参数。 从形式上看可以计算出上式中的 $\hat{\boldsymbol{\mu}}_B $ 和 σ ^ B \hat{\boldsymbol{\sigma}}_B σ^B​ μ ^ B 1 ∣ B ∣ ∑ x ∈ B x σ ^ B 1 ∣ B ∣ ∑ x ∈ B ( x − μ ^ B ) 2 ϵ \begin{align} \hat{\boldsymbol{\mu}}_B \frac{1}{\left|B\right|}\sum_{\boldsymbol{x}\in B}\boldsymbol{x}\\ \hat{\boldsymbol{\sigma}}_B \frac{1}{\left|B\right|}\sum_{\boldsymbol{x}\in B}(\boldsymbol{x}-\hat{\boldsymbol{\mu}}_B)^2\epsilon \end{align} μ^​B​σ^B​​∣B∣1​x∈B∑​x∣B∣1​x∈B∑​(x−μ^​B​)2ϵ​​ 式中添加的大于零的常量 ϵ \epsilon ϵ 可以保证不会发生除数为零的错误。 7.5.2 批量规范化层 全连接层和卷积层需要两种略有不同的批量规范化策略 全连接层 通常我们将批量规范化层置于全连接层中的仿射变换和激活函数之间。 设全连接层的输入为 x x x权重参数和偏置参数分别为 W \boldsymbol{W} W 和 b b b激活函数为 ϕ \phi ϕ批量规范化的运算符为 B N BN BN。那么使用批量规范化的全连接层的输出的计算详情如下 h ϕ ( B N ( W x b ) ) \boldsymbol{h}\phi(BN(\boldsymbol{W}xb)) hϕ(BN(Wxb)) 卷积层 对于卷积层可以在卷积层之后和非线性激活函数之前应用批量规范化。而且需要对多个输出通道中的每个输出执行批量规范化每个通道都有自己的标量参数拉伸和偏移参数。 预测过程中的批量规范化 批量规范化在训练模式和预测模式下的行为通常不同。 7.5.3 从零实现 import torch from torch import nn from d2l import torch as d2ldef batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):if not torch.is_grad_enabled(): # 如果是在预测模式下直接使用传入的移动平均所得的均值和方差X_hat (X - moving_mean) / torch.sqrt(moving_var eps)else:assert len(X.shape) in (2, 4)if len(X.shape) 2: # 使用全连接层的情况计算特征维上的均值和方差mean X.mean(dim0) # 按行求均值var ((X - mean) ** 2).mean(dim0) # 按行求方差else: # 使用二维卷积层的情况计算通道维上axis1的均值和方差。mean X.mean(dim(0, 2, 3), keepdimTrue) # 保持X的形状(即第1维输出通道数)以便后面可以做广播运算结果的形状是1*n*1*1var ((X - mean) ** 2).mean(dim(0, 2, 3), keepdimTrue)X_hat (X - mean) / torch.sqrt(var eps) # 训练模式下用当前的均值和方差做标准化# 更新移动平均的均值和方差moving_mean momentum * moving_mean (1.0 - momentum) * meanmoving_var momentum * moving_var (1.0 - momentum) * varY gamma * X_hat beta # 缩放和移位return Y, moving_mean.data, moving_var.dataclass BatchNorm(nn.Module):# num_features完全连接层的输出数量或卷积层的输出通道数。# num_dims2表示完全连接层4表示卷积层def __init__(self, num_features, num_dims):super().__init__()if num_dims 2:shape (1, num_features)else:shape (1, num_features, 1, 1)# 参与求梯度和迭代的拉伸和偏移参数分别初始化成1和0self.gamma nn.Parameter(torch.ones(shape))self.beta nn.Parameter(torch.zeros(shape))# 非模型参数的变量初始化为0和1self.moving_mean torch.zeros(shape)self.moving_var torch.ones(shape)def forward(self, X):# 如果X不在内存上将moving_mean和moving_var# 复制到X所在显存上if self.moving_mean.device ! X.device:self.moving_mean self.moving_mean.to(X.device)self.moving_var self.moving_var.to(X.device)# 保存更新过的moving_mean和moving_varY, self.moving_mean, self.moving_var batch_norm(X, self.gamma, self.beta, self.moving_mean,self.moving_var, eps1e-5, momentum0.9)return Y7.5.4 使用批量规范化层的 LeNet net nn.Sequential(nn.Conv2d(1, 6, kernel_size5), BatchNorm(6, num_dims4), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), BatchNorm(16, num_dims4), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2), nn.Flatten(),nn.Linear(16*4*4, 120), BatchNorm(120, num_dims2), nn.Sigmoid(),nn.Linear(120, 84), BatchNorm(84, num_dims2), nn.Sigmoid(),nn.Linear(84, 10))学习率拉的好大。 lr, num_epochs, batch_size 1.0, 10, 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())loss 0.262, train acc 0.902, test acc 0.879 20495.7 examples/sec on cuda:07.5.5 简明实现 net1 nn.Sequential(nn.Conv2d(1, 6, kernel_size5), nn.BatchNorm2d(6), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.BatchNorm2d(16), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2), nn.Flatten(),nn.Linear(256, 120), nn.BatchNorm1d(120), nn.Sigmoid(),nn.Linear(120, 84), nn.BatchNorm1d(84), nn.Sigmoid(),nn.Linear(84, 10))d2l.train_ch6(net1, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())loss 0.263, train acc 0.903, test acc 0.870 36208.4 examples/sec on cuda:07.5.6 争议 这个东西就是玄学有效但是不知大为什么有效。作者给出的解释是“减少内部协变量偏移”但是也是处于直觉而不是证明。 练习 1在使用批量规范化之前我们是否可以从全连接层或者卷积层中删除偏置函数为什么 我认为可以偏置会在减去均值时消去此外BN 中也是带偏移参数的。 2比较 LeNet 在使用和不使用批量规范化情况下的学习率。 a. 绘制训练和测试精准度的提高。b. 学习率有多高?学习率相同的话使用批量规范化的收敛速度会非常快。 3我们是否需要在每个层中进行批量规范化尝试一下 net2 nn.Sequential(nn.Conv2d(1, 6, kernel_size5), nn.BatchNorm2d(6), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.BatchNorm2d(16), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2), nn.Flatten(),nn.Linear(256, 120), nn.Sigmoid(),nn.Linear(120, 84), nn.Sigmoid(),nn.Linear(84, 10))lr, num_epochs, batch_size 1.0, 10, 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) d2l.train_ch6(net2, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())loss 0.349, train acc 0.871, test acc 0.856 37741.0 examples/sec on cuda:0去掉后面两个之后曲线稳多了。 4可以通过批量规范化来替换暂退法吗行为会如何改变 看来还是批量规范化好些 net3 nn.Sequential(nn.Conv2d(1, 6, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2), nn.Flatten(),nn.Linear(256, 120), nn.Sigmoid(),nn.Dropout(p0.1),nn.Linear(120, 84), nn.Sigmoid(),nn.Dropout(p0.1),nn.Linear(84, 10))lr, num_epochs, batch_size 1.0, 10, 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) d2l.train_ch6(net3, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())loss 0.541, train acc 0.790, test acc 0.748 40642.6 examples/sec on cuda:05 确定参数 gamma 和 beta并观察和分析结果。 net[1].gamma.reshape((-1,)), net[1].beta.reshape((-1,))(tensor([3.1800, 1.6709, 4.0375, 3.4801, 2.6182, 2.3103], devicecuda:0,grad_fnReshapeAliasBackward0),tensor([ 3.5415, 1.6295, 1.8926, -1.5510, -2.4556, 1.1020], devicecuda:0,grad_fnReshapeAliasBackward0))6查看高级 API 中关于 BatchNorm 的在线文档以了解其他批量规范化的应用。 略。 7研究思路可以应用的其他“规范化”变换有哪些可以应用概率积分变换吗全秩协方差估计呢 略。
http://www.dnsts.com.cn/news/9259.html

相关文章:

  • 淄川响应式网站建设网站制作首页
  • 如何维护企业电子商务网站建设建设网站怎样挣钱
  • 佛山市网站建设平台东四网站建设
  • 网站建设平台方案设计随县网站建设
  • 南京网站制作电话个人域名注册流程
  • 漳州微网站建设公司哪家好在线制作图片散发光芒
  • 湖州网站推广电子商务网站建设与营运
  • 浙江自己如何做网站网站域名空间代理
  • 优化网站排名怎么制作天津建设工程信息网的ca花钱吗
  • 网站主页设计布局wordpress移动端禁止放大
  • 北京市门户网站建设旅游网站的网页设计素材
  • 百度智能建站怎么样鄂尔多斯小程序开发公司
  • 北京网站建设公司艺唯思北京微网站
  • 开发网站开发工程师招聘常用的网页设计软件有
  • 做网站工资高吗wordpress 配置数据库
  • 眼查看网站开发语言网站建设代理政策
  • seo如何选择网站标题房屋在线设计平台
  • 门户网站建设工作领导小组网络编程技术实验报告
  • 网络移动公司的网站建设企业网站建设备案都需要什么
  • 简述电子商务网站建设方案网站建设流程共有几个阶段
  • 外贸网站谷歌优化装饰公司网站建设效果
  • 河北搭建营销型网站电脑h5制作工具
  • 效果图网站密码破解微信公众号运营模式
  • 商丘企业网站建设推荐河南建设银行网站
  • wap网站生成小程序全能网站建设完全自学
  • 东莞朝阳网站建设济南市住房和城乡建设厅官网
  • 网站空间不续费做网站优化排名
  • 蛋糕行业网站建设方案权威seo技术
  • 开网站设计公司多少钱网站设计的图片
  • 广东网站建设定制wordpress百万文章