深度学习——过拟合和Dropout

这篇具有很好参考价值的文章主要介绍了深度学习——过拟合和Dropout。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本概念

什么是过拟合?

过拟合(Overfitting)是机器学习和深度学习中常见的问题之一,它指的是模型在训练数据上表现得很好,但在未见过的新数据上表现较差的现象。
当一个模型过度地学习了训练数据的细节和噪声,而忽略了数据中的一般规律和模式时,就会发生过拟合。过拟合是由于模型过于复杂或者训练数据过少,导致模型记住了训练数据中的每个细节,从而无法泛化到新数据。

解决方法

1.增加训练数据量:通过增加更多的训练数据,使得模型能够更好地学习数据的一般规律,而不是过多地依赖于少量的数据样本。
2.简化模型:减少模型的复杂度,如减少网络的层数、减少节点数、减少参数量等,从而降低过拟合的风险。
3.使用正则化技术:如L1正则化、L2正则化等,通过在损失函数中添加正则化项,惩罚过大的权重,防止模型过度拟合训练数据。
4.使用Dropout:在训练过程中随机丢弃部分神经元,减少模型的复杂性,有助于防止过拟合。
5.交叉验证:使用交叉验证来评估模型的性能,通过不同子集的训练集和测试集来评估模型的泛化能力。

Dropout

Dropout是一种用于减少过拟合问题的正则化技术,常用于深度神经网络训练中。是一种随机丢弃(drop)神经元的方法。
在正常的神经网络中,每个神经元都会对输入进行权重计算和传递,这样每个神经元都可能贡献过多,导致网络过拟合训练数据。Dropout通过在训练过程中随机丢弃一部分神经元,即在前向传播过程中以一定的概率将某些神经元的输出置为0,这样可以强制神经网络学习到更加鲁棒的特征。

对比加Dropout层和不加Dropout层

import torch
import matplotlib.pyplot as plt

# 用于复现
# torch.manual_seed(1)    # reproducible

# 20个数据点
N_SAMPLES = 20
# 隐藏层的个数为300
N_HIDDEN = 300

# training data
# 在-1到1之间等差取N_SAMPLES个点,然后再加维度,最终的数据变为N_SAMPLES行、1列的向量
x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1)
# 在均值为0、标准差为1的正态分布中采样N_SAMPLES个点的值,然后乘0.3,加上x,最后得到x对应的y值
y = x + 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1))

# 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.data.numpy(), y.data.numpy(), c='magenta', s=50, alpha=0.5, label='train')
plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c='cyan', s=50, alpha=0.5, label='test')
plt.legend(loc='upper left')
plt.ylim((-2.5, 2.5))
plt.show()

# 快速搭建神经网络,不加dropout层
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),
)

# 加了dropout层的
net_dropped = torch.nn.Sequential(
    torch.nn.Linear(1, N_HIDDEN),
    torch.nn.Dropout(0.5),  # drop 50% of the neuron
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN, N_HIDDEN),
    torch.nn.Dropout(0.5),  # drop 50% of the neuron
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN, 1),
)

print(net_overfitting)  # net architecture
print(net_dropped)

# 使用Adam优化神经网络的参数
optimizer_ofit = torch.optim.Adam(net_overfitting.parameters(), lr=0.01)
optimizer_drop = torch.optim.Adam(net_dropped.parameters(), lr=0.01)
# 误差函数使用MSELoss
loss_func = torch.nn.MSELoss()

# 开启交互式绘图
plt.ion()   # something about plotting

# 训练五百步
for t in range(500):
    # 将x输入到不加dropout层的神经网络中,得预测值
    pred_ofit = net_overfitting(x)
    # 将x输入到加了dropout层的神经网络中,得预测值
    pred_drop = net_dropped(x)
    # 计算loss
    loss_ofit = loss_func(pred_ofit, y)
    # 计算loss
    loss_drop = loss_func(pred_drop, y)

    # 梯度清零
    optimizer_ofit.zero_grad()
    optimizer_drop.zero_grad()
    # 误差反向传播
    loss_ofit.backward()
    loss_drop.backward()
    # 优化器逐步优化
    optimizer_ofit.step()
    optimizer_drop.step()

    # 每10步进行更新
    if t % 10 == 0:
        """
            net_overfitting.eval()和net_dropped.eval()是将两个神经网络模型切换到评估模式,
            用于在测试数据上进行稳定的前向传播,得到准确的预测结果。
        """
        # change to eval mode in order to fix drop out effect
        net_overfitting.eval()
        net_dropped.eval()  # parameters for dropout differ from train mode

        # plotting
        plt.cla()
        test_pred_ofit = net_overfitting(test_x)
        test_pred_drop = net_dropped(test_x)
        plt.scatter(x.data.numpy(), y.data.numpy(), c='magenta', s=50, alpha=0.3, label='train')
        plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c='cyan', s=50, alpha=0.3, label='test')
        plt.plot(test_x.data.numpy(), test_pred_ofit.data.numpy(), 'r-', lw=3, label='overfitting')
        plt.plot(test_x.data.numpy(), test_pred_drop.data.numpy(), 'b--', lw=3, label='dropout(50%)')
        plt.text(0, -1.2, 'overfitting loss=%.4f' % loss_func(test_pred_ofit, test_y).data.numpy(), fontdict={'size': 20, 'color':  'red'})
        plt.text(0, -1.5, 'dropout loss=%.4f' % loss_func(test_pred_drop, test_y).data.numpy(), fontdict={'size': 20, 'color': 'blue'})
        plt.legend(loc='upper left')
        plt.ylim((-2.5, 2.5))
        plt.pause(0.1)

        # change back to train mode
        """
            在训练模式下,神经网络中的Dropout层将会生效,即在前向传播过程中会随机丢弃一部分神经元。
            这是为了在训练阶段增加模型的鲁棒性,避免过拟合。
        """
        net_overfitting.train()
        net_dropped.train()

# 关闭交互模式
plt.ioff()
plt.show()

运行效果

深度学习——过拟合和Dropout,PyTorch,深度学习,深度学习,人工智能文章来源地址https://www.toymoban.com/news/detail-600166.html

到了这里,关于深度学习——过拟合和Dropout的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《人工智能专栏》必读150篇 | 专栏介绍 & 专栏目录 & Python与PyTorch | 机器与深度学习 | 目标检测 | YOLOv5及改进 | YOLOv8及改进 | 关键知识点 | 工具

    各位读者们好,本专栏最近刚推出,限于个人能力有限,不免会有诸多错误,敬请私信反馈给我,接受善意的提示,后期我会改正,谢谢,感谢。 第一步 :[ 购买点击跳转 ] 第二步 : 代码函数调用关系图(全网最详尽-重要) 因文档特殊,不能在博客正确显示,请移步以下链接

    2024年02月02日
    浏览(46)
  • 探索人工智能:深度学习、人工智能安全和人工智能编程(文末送书)

    人工智能知识对于当今的互联网技术人来说已经是刚需。但人工智能的概念、流派、技术纷繁复杂,选择哪本书入门最适合呢? 这部被誉为人工智能“百科全书”的《人工智能(第3版)》,可以作为每个技术人进入 AI 世界的第一本书。 购书链接,限时特惠5折 这本书是美国

    2024年02月03日
    浏览(75)
  • 计算机视觉与深度学习-全连接神经网络-训练过程-欠拟合、过拟合和Dropout- [北邮鲁鹏]

    机器学习的根本问题是 优化 与 泛化 问题。 优化 :是指调节模型以在训练数据上得到最佳性能。 泛化 :是指训练好的模型在前所未见的数据上的性能好坏。 出现过拟合,得到的模型在训练集上的准确率很高,但是在真实的场景下识别率确很低。 过拟合overfitting:指学习时

    2024年02月07日
    浏览(34)
  • 人工智能之深度学习

    第一章 人工智能概述 1.1人工智能的概念和历史 1.2人工智能的发展趋势和挑战 1.3人工智能的伦理和社会问题 第二章 数学基础 1.1线性代数 1.2概率与统计 1.3微积分 第三章 监督学习 1.1无监督学习 1.2半监督学习 1.3增强学习 第四章 深度学习 1.1神经网络的基本原理 1.2深度学习的

    2024年02月09日
    浏览(38)
  • 人工智能深度学习

    目录 人工智能 深度学习 机器学习 神经网络 机器学习的范围 模式识别 数据挖掘 统计学习 计算机视觉 语音识别 自然语言处理 机器学习的方法 回归算法 神经网络 SVM(支持向量机) 聚类算法 降维算法 推荐算法 其他 机器学习的分类 机器学习模型的评估 机器学习的应用 机

    2024年02月22日
    浏览(40)
  • 人工智能、机器学习、深度学习的区别

    人工智能涵盖范围最广,它包含了机器学习;而机器学习是人工智能的重要研究内容,它又包含了深度学习。 人工智能是一门以计算机科学为基础,融合了数学、神经学、心理学、控制学等多个科目的交叉学科。 人工智能是一门致力于使计算机能够模拟、模仿人类智能的学

    2024年02月08日
    浏览(40)
  • 人工智能学习07--pytorch14--ResNet网络/BN/迁移学习详解+pytorch搭建

    亮点:网络结构特别深 (突变点是因为学习率除0.1?) 梯度消失 :假设每一层的误差梯度是一个小于1的数,则在反向传播过程中,每向前传播一层,都要乘以一个小于1的误差梯度。当网络越来越深的时候,相乘的这些小于1的系数越多,就越趋近于0,这样梯度就会越来越小

    2023年04月11日
    浏览(34)
  • 人工智能的深度学习如何入门

    人工智能深度学习近年来成为热门的技术领域,被广泛应用于许多领域,如自然语言处理、图像识别、机器翻译等。学习人工智能深度学习需要具备一定的数学和编程基础,但对于初学者来说,并不需要过于复杂的数学和编程知识。本文将介绍人工智能深度学习的基本概念和

    2024年03月27日
    浏览(41)
  • 深度学习:探索人工智能的前沿

    人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够执行通常需要人类智能的任务的领域。从早期的符号推理到现代的深度学习,人工智能经历了漫长的发展过程。 20世纪50年代,AI的奠基性工作开始,研究者们试图通过符号推理来模拟人类思维过程。然而,

    2024年01月19日
    浏览(56)
  • 12、人工智能、机器学习、深度学习的关系

    很多年前听一个机器学习的公开课,在QA环节,一个同学问了老师一个问题“ 机器学习和深度学习是什么关系 ”? 老师先没回答,而是反问了在场的同学,结果问了2-3个,没有人可以回答的很到位,我当时也是初学一脸懵,会场准备的小礼品也没有拿到。 后来老师解释“机

    2024年02月05日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包