numpy实现dropout与L1,L2正则化请参考我另一篇博客

https://blog.csdn.net/fanzonghao/article/details/81079757

pytorch使用dropout与L2

import torch
import matplotlib.pyplot as plt
torch.manual_seed(1)    # Sets the seed for generating random numbers.reproducibleN_SAMPLES = 20
N_HIDDEN = 300# training data
x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1)
print('x.size()',x.size())# torch.normal(mean, std, out=None) → Tensor
y = x + 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1))
print(y.shape)
print(y)
# test data
test_x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1)
test_y = test_x + 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1))# show data
plt.scatter(x.numpy(), y.numpy(), c='red', s=50, alpha=0.5, label='train')
plt.scatter(test_x.numpy(), test_y.numpy(), c='blue', s=50, alpha=0.5, label='test')
plt.legend(loc='upper left')
plt.ylim((-2.5, 2.5))
plt.show()net_overfitting = torch.nn.Sequential(torch.nn.Linear(1,N_HIDDEN),torch.nn.ReLU(),torch.nn.Linear(N_HIDDEN,N_HIDDEN),torch.nn.ReLU(),torch.nn.Linear(N_HIDDEN,1),
)net_dropped = torch.nn.Sequential(torch.nn.Linear(1,N_HIDDEN),torch.nn.Dropout(0.5), # 0.5的概率失活torch.nn.ReLU(),torch.nn.Linear(N_HIDDEN,N_HIDDEN),torch.nn.Dropout(0.5),torch.nn.ReLU(),torch.nn.Linear(N_HIDDEN,1),
)#no dropout
optimizer_ofit = torch.optim.Adam(net_overfitting.parameters(), lr=0.001)
#add dropout
optimizer_drop = torch.optim.Adam(net_dropped.parameters(), lr=0.01)
#add l2 penalty weight_decay
# optimizer_ofit = torch.optim.Adam(net_overfitting.parameters(), lr=0.001,weight_decay=0.001)
loss = torch.nn.MSELoss()for epoch in range(500):pred_ofit = net_overfitting(x)loss_ofit = loss(pred_ofit, y)optimizer_ofit.zero_grad()loss_ofit.backward()optimizer_ofit.step()#DROP OUTpred_drop = net_dropped(x)loss_drop = loss(pred_drop, y)optimizer_drop.zero_grad()loss_drop.backward()optimizer_drop.step()if epoch % 250 == 0:net_overfitting.eval()  # 将神经网络转换成测试形式,此时不会对神经网络dropoutnet_dropped.eval()  # 此时不会对神经网络dropouttest_pred_ofit = net_overfitting(test_x)test_pred_drop = net_dropped(test_x)# show dataplt.scatter(x.numpy(), y.numpy(), c='red', s=50, alpha=0.5, label='train')plt.scatter(test_x.numpy(), test_y.numpy(), c='blue', s=50, alpha=0.5, label='test')plt.plot(test_x.numpy(), test_pred_ofit.detach().numpy(), 'r-', lw=3, label='overfitting')plt.plot(test_x.numpy(), test_pred_drop.detach().numpy(), 'b--', lw=3, label='L2')plt.text(0, -1.2, 'overfitting loss=%.4f' % loss(test_pred_ofit, test_y).detach().numpy(),fontdict={'size': 20, 'color': 'red'})plt.text(0, -1.5, 'L2 loss=%.4f' % loss(test_pred_drop, test_y).detach().numpy(),fontdict={'size': 20, 'color': 'blue'})plt.legend(loc='upper left')plt.ylim((-2.5, 2.5))plt.pause(0.1)net_overfitting.train()net_dropped.train()plt.ioff()
plt.show()

数据:

使用dropout对比:可看出使用dropout具有防止过拟合的作用。

使用L2对比:可看出使用L2也具有防止过拟合作用。

pytorch实现Dropout与正则化防止过拟合相关推荐

  1. PyTorch基础-Dropout和正则化-05

    Dropout抑制过拟合 import numpy as np import torch from torch import nn,optim from torch.autograd import V ...

  2. keras添加正则化全连接_第16章 Keras使用Dropout正则化防止过拟合

    Dropout虽然简单,但可以有效防止过拟合.本章关于如何在Keras中使用Dropout.本章包括: dropout的原理 dropout的使用 在隐层上使用dropout 我们开始吧. 16.1 ...

  3. 【Pytorch神经网络理论篇】 15 过拟合问题的优化技巧(二):Dropout()方法

    1 Dropout方法 2.1 Dropout原理 在训练过程中,每次随机选择一部分节点不去进行学习. 2.1.1 从Dropout原理来看过拟合的原因 任何一个模型不能完全把数据分开,在某一类中一定 ...

  4. 深度学习总结:用pytorch做dropout和Batch Normalization时需要注意的地方,用tensorflow做dropout和BN时需要注意的地方,

    用pytorch做dropout和BN时需要注意的地方 pytorch做dropout: 就是train的时候使用dropout,训练的时候不使用dropout, pytorch里面是通过net.ev ...

  5. 【TensorFlow自学2】基础语句+激活函数+损失函数+正则化缓解过拟合+优化器(SGD、Adam等)

    2.1预备知识 tf.where()–条件语句真的话返回A,假的话返回B tf.where(条件语句,A(真-返回),B(假-返回)) import tensorflow as tfa=tf.cons ...

  6. 深度学习--TensorFlow(7)拟合(过拟合处理)(数据增强、提前停止训练、dropout、正则化、标签平滑)

    目录 拟合 1.拟合情况 2.抵抗过拟合方法 过拟合处理(防止过拟合): 一.数据增强 1.设置图像生成器 2.载入图片 3.图像转三维数据 4.三维转四维 5.生成图片(用图像生成器) 代码 二.提 ...

  7. 【Pytorch神经网络理论篇】 14 过拟合问题的优化技巧(一):基本概念+正则化+数据增大

    1 过拟合问题的描述 1.1 过拟合问题概述 深度额学习训练过程中,在训练阶段得到了较好的准确率,但在识别非数据集数据时存在精度下降的问题,这种现象称为过拟合现象. 主要原因:由于模型的拟合度过高,导 ...

  8. 详解 | Dropout为何能防止过拟合?

    作者 | 张雨石 开篇明义,dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃.注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-b ...

  9. 【Pytorch神经网络理论篇】 16 过拟合问题的优化技巧(三):批量归一化

    1 批量归一化理论 1.1 批量归一化原理 1.2 批量归一化定义 将每一层运算出来的数据归一化成均值为0.方差为1的标准高斯分布.这样就会在保留样本的分布特征,又消除了层与层间的分布差异. 在实际应 ...

最新文章

  1. Zeal 离线API文档浏览器
  2. linux实现nat转发和内部端口映射
  3. 求解旅行商问题C语言的算法,【算法作业】用回溯法求解旅行商问题
  4. 《白鹿原》金句摘抄(一)
  5. leetcode1169. 查询无效交易
  6. GCC(-pg) profile mcount | ftrace基础原理
  7. 利用Python Matplotlib库做简单的视觉化(2)
  8. 一体机的扫描至网络共享的设置
  9. 同程艺龙10月初赴港IPO,小程序里又走出一家上市公司
  10. BlackMamba:C2后渗透框架
  11. Win软件 - Listary
  12. 人工智能顶会顶刊以及SCI,IF,核心,分区
  13. arcmap shp导出cad无反应_软件技巧如何利用OSM提取场地CAD以及LANDUSE属性
  14. python考勤系统代码_500行python代码打造刷脸考勤系统
  15. Java微信小程序的授权登陆
  16. Flink DataStream Keyed和Non-Keyed窗口、WindowAssigner、窗口生命周期、窗口函数、迟到数据和窗口结果的处理
  17. 豆瓣新书速递数据爬取与简单数据处理 | 豆瓣爬虫 python pandas
  18. 男生三十转行学计算机,三十岁的男人转行学什么技术能跟上时代的脚步?
  19. 学计算机的第一天,计算机人的一天
  20. [Unity-26] AnimationClip压缩-动画文件压缩

热门文章

  1. 12c oracle 激活_Oracle 12C 安装教程
  2. Linux 程 序 员 失 业 警 告
  3. 领域应用 | 2020 年中国知识图谱行业分析报告
  4. 浅谈事理图谱认知:系统体系+领域收敛+人机协同+辅助范式
  5. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”...
  6. Spring入门之一-------实现一个简单的IoC
  7. linux发送邮件的功能总结
  8. spring boot学习(2) SpringBoot 项目属性配置
  9. With you With me
  10. 重命名myclipse中web项目名称的过程