1 对于丢弃法的一点小思考

(1) 对于模型设计我们可以把隐藏层设计的稍微大一点然后用drop out控制隐藏层大小这样的设计可能比隐藏层设计的小一点的效果更好,防止过拟合,drop out 其实就是一个正则项。

(2) drop out 就是随机丢弃隐藏层神经元的个数从而防止参数过分依赖训练数据,增加参数对数据集的泛化能力

(3) Drop out可以减少神经元之间复杂的共适应关系,因为Dropout使得某两个神经元不一定每次都在一个子网络结构中出现。基于此权值的更新不在依赖于固定关系的隐含节点的共同作用,使得了在丢失某些特定信息的情况下依然可以从其它信息中学到一些模式(鲁棒性),迫使网络去学习更加鲁棒的特征(更加具有通适性)。

(4) drop out作用在隐藏层的输出可以再激活函数之前也可以在激活函数之后。drop out作用在全连接层而不是卷积层,丢弃前一层的输出丢弃后一层的输出。drop out 比起权重衰退(L2正则化来说)更容易调参

(5) 随机性高稳定性就会增加这怎么理解呢? 我理解的是随机性高了会弱化一些偶然事件的影响考虑的方面会增多防止过拟合。

(6) 丢弃法是在训练的时候丢弃一些神经元,在预测的时候没有丢弃神经元。

2 代码实现(手动)

(1) 生成dropout函数

import torch
from torch import nn
from d2l import torch as d2ldef dropout_layer(X, dropout):assert 0 <= dropout <= 1 #ssert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假.也就是说dropout值必须在0-1之间# 在本情况中,所有元素都被丢弃。if dropout == 1:return torch.zeros_like(X)# 在本情况中,所有元素都被保留。if dropout == 0:return Xmask = (torch.rand(X.shape) > dropout).float() #rand()返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数return mask * X / (1.0 - dropout)

(2) 定义模型参数

num_inputs, num_outputs, num_hiddens1, num_hiddens2 = 784, 10, 256,256

(3) 定义模型

dropout1, dropout2 = 0.2, 0.5
class Net(nn.Module):def __init__(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2,is_training = True):super(Net, self).__init__()self.num_inputs = num_inputsself.training = is_trainingself.lin1 = nn.Linear(num_inputs, num_hiddens1)self.lin2 = nn.Linear(num_hiddens1, num_hiddens2)self.lin3 = nn.Linear(num_hiddens2, num_outputs)self.relu = nn.ReLU()def forward(self, X): #定义前向传播H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs))))# 只有在训练模型时才使用dropoutif self.training == True:# 在第一个全连接层之后添加一个dropout层H1 = dropout_layer(H1, dropout1)H2 = self.relu(self.lin2(H1))if self.training == True:# 在第二个全连接层之后添加一个dropout层H2 = dropout_layer(H2, dropout2)out = self.lin3(H2)return out

(4) 训练测试

num_epochs, lr, batch_size = 10, 0.5, 256
loss = nn.CrossEntropyLoss()
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
trainer = torch.optim.SGD(net.parameters(), lr=lr)
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
d2l.plt.show()

总结

1 除了控制权重向量的维数和大小之外,dropout也是避免过拟合的另一种工具。它们通常是联合使用的。

2 dropout将激活值 h 替换为具有期望值 h 的随机变量。

3 dropout仅在训练期间使用。

丢弃法(dropout)相关推荐

  1. 丢弃法——dropout

    <动手学深度学习pytorch>部分学习笔记,仅用作自己复习. 丢弃法--dropout 除了权重衰减以外,深度学习模型常使⽤丢弃法(dropout) 来应对过拟合问题.丢弃法有一些不同的 ...

  2. 丢弃法Dropout

    丢弃法Dropout:一种抑制过拟合的方法. 上图中提到的两种解决方案:1.downgrade_in_infer:训练时随机丢弃一部分神经元:预测时不丢弃神经元,这里提到的不丢弃神经元是指预测时不丢弃 ...

  3. 【pytorch】过拟合的应对办法 —— 丢弃法(dropout)

    文章目录 一.什么是丢弃法,为什么丢弃法可以缓解过拟合? 二.丢弃法的手动实现 三.丢弃法的pytorch实现 参考 关于过拟合.欠拟合的解释可以参考我的博文:[pytorch]过拟合和欠拟合详解,并 ...

  4. 《动手学深度学习》丢弃法(dropout)

    丢弃法(dropout) 丢弃法 方法 从零开始实现 定义模型参数 定义模型 训练和测试模型 简洁实现 小结 参考文献 丢弃法 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout ...

  5. PyTorch——Dropout(丢弃法)

    参考链接 https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.13_dropout dropout 深度学习模型常常使 ...

  6. 【深度学习】丢弃法(dropout)

    丢弃法 在小虾的这篇文章中介绍了权重衰减来应对过拟合问题(https://blog.csdn.net/qq_33432841/article/details/107879937),下面在介绍一种应对过 ...

  7. [pytorch、学习] - 3.13 丢弃法

    参考 3.13 丢弃法 过拟合问题的另一种解决办法是丢弃法.当对隐藏层使用丢弃法时,隐藏单元有一定概率被丢弃. 3.12.1 方法 3.13.2 从零开始实现 import torch import ...

  8. Pytorch与drop_out(丢弃法)

    简述 深度学习模型常常使用丢弃法(dropout)[1] 来应对过拟合问题.丢弃法有一些不同的变体.文中提到的丢弃法特指倒置丢弃法(inverted dropout). 对于激活函数而言有: hi=ϕ ...

  9. 动手学深度学习V2.0(Pytorch)——13.丢弃法

    文章目录 1. 课件讲解 插一句(正则的分类) 2. Q&A 2.1 dropout是初次生效,还是每次都重新选取概率 2.2 dropout的感性评价 2.3 dropout随机置0对求梯度 ...

最新文章

  1. 集合论——二元关系的表示方法,特殊的二元关系及关系的运算
  2. SQL Server 2016 列存储技术做实时分析
  3. java mapper.readtree_Java ObjectMapper.readTree方法代码示例
  4. python永久保存数据_python如何保存数据
  5. java web服务_将Java服务公开为Web服务
  6. 西工大18秋《C语言程序设计》平时作业,西工大18秋《C语言程序设计》平时作业...
  7. 计算机小白可以学python吗_非计算机专业小白如何系统学Python语言
  8. 路由器将迎重磅升级 WiFi速度提升3倍
  9. 12306 下铺coding
  10. css 伪类 :fullscreen 应用于当前处于全屏显示模式的元素。
  11. 可信计算理论与技术--远程证明技术
  12. linux多个网卡丢包,linux系统双网卡绑定及丢包问题
  13. 火车采集器V9插件开发手册
  14. 获取百度地图开发平台的key
  15. 智慧用电安全管理系统解决方案
  16. linux 隔行添加字符,EXCEL 隔行插入空白行、批量添加字符 等技巧备份
  17. 成都金堂计算机学校有哪些?
  18. 理解回忆 李烨的机器学习
  19. 本周AI热点回顾:何恺明RegNet超越EfficientNet、数学难题“abc猜想”封印终被开启、微软麻将 AI 论文发布
  20. 阿里矢量图刷新显示异常

热门文章

  1. 实施工程师:软件产品生命周期
  2. 运动、路径与轨迹三种规划的区别
  3. JavaScript jQuery 实现banner(轮播图) 一
  4. 360网管企业版迁移及管理
  5. 将PDF文件转换为高质量的图片:免费的在线PDF转换器
  6. 【luogu SP7258】SUBLEX - Lexicographical Substring Search
  7. 微机化远动系统与计算机网络,【浅析】智能电网调度自动化现状与发展
  8. otc焊接机器人编程模拟软件_OTC焊接机器人精密焊接的编程技巧
  9. 记录--微信小程序,uniapp,H5端发送,显示emoji表情
  10. 隐藏浏览器滚动条但内容可以滚动的3种解决方式(简单清晰)