[深度学习入门]PyTorch环境配置与PyTorch学习(二)

简介: 笔记

(七)快速搭建法

25.png

Sequential 本质是一个模块(即 Module),根据Pytorch中的约定,模块中可以继续添加模块。

 这意味着我们可以在 Sequential 中添加其它的模块(自然也就可以添加其他的 Sequential)。

 添加完成后,Sequential 会将这些模块组成一个流水线,输入将依次通过这些模块得到一个输出。

26.png

(八)保存提取

1.保存并恢复全网络:

 这种方式很简单,不需要再构造一个网络,直接net2=torch.load(‘net.pkl’)(名字要和保存的一致)。


2.只保存并恢复参数:

 这种方式则需要构建一个层数,神经元数一致的网络。

 之后再net2.load_state_dict(torch.load(‘net_params.pkl’))即可。

27.png

state_dict()将layer_name : layer_param的键值信息存储为dict形式

28.png

load_state_dict是使用反序列化的state_dict加载模型的参数字典,用来加载模型参数。(load_state_dict函数的参数是字典对象,而不是保存对象的路径)

 格式:torch.nn.Module.load_state_dict(state_dict, strict=True)

 对net123用完全相同的方式训练100步,并进行可视化。

 运行程序并验证,发现三张图完全一致。


29.png

(九)批训练(mini-batch training)

  首先介绍一下import torch.utils.data as Data,这在训练过程中基本都会用到。该接口大多用来读取数据和把数据封装成Tensor,之后的DataLoader用来做mini-batch训练。

30.png

DataLoader 是 torch 给我们用来包装数据的工具

  所以要将自己的 (numpy array 或其他) 数据形式装换成 Tensor, 然后再放进这个包装器中。使用 DataLoader 的好处是:他们帮你有效地迭代数据。

31.png

TensorDataset 基于一系列张量构建数据集。这些张量的形状可以不尽相同,但第一个维度必须具有相同大小。( TensorDataset 将张量的第一个维度视为数据集大小的维度,数据集在传入 DataLoader 后,该维度也是 batch_size 所在的维度)

 实际上还有第五个参数drop_last: 当样本数不能被batchsize整除时, 是否舍弃最后一批数据。(默认不舍弃)

 DataLoader构建可迭代的数据装载器,我们在训练的时候,每一个for循环,每一次iteration(迭代),就是从DataLoader中获取一个batch_size大小的数据的。

 Epoch: 所有训练样本都已输入到模型中,称为一个Epoch。

 Iteration(step): 一批样本输入到模型中,称为一个Iteration。

 Batchsize: 一批样本的大小, 决定一个Epoch有多少个Iteration。

 例:假设样本总数80, Batchsize是8, 那么1Epoch=10Iteration。 假设样本总数是87, Batchsize是8, 如果drop_last=True, 那么1Epoch=10Iteration;如果等于False, 那么1Epoch=11Iteration, 最后1个Iteration有7个样本。

32.png

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标

  输出结果如下:

33.png

 若将BATCH_SIZE改为8,则结果如下:

image.png

多次运行上述代码,发现结果均一致,而不是随机的。

  这是因为我们在程序开头加入了这句:

image.png

torch.manual_seed()手动设置种子,一般可用于固定随机初始化的权重值(一旦固定种子,后面依次生成的随机数其实都是固定的)

 这样就可以让每次重新训练网络时的权重的初始值虽然是随机生成的,但结果却是固定的。


(十)加速神经网络训练 (Speed Up Training)

image.png

深度学习的优化算法主要有GD,SGD,Momentum,RMSProp和Adam算法等。

 深度学习中绝大多数目标函数都很复杂。因此,很多优化问题并不存在解析解,而需要使用基于数值方法的优化算法找到近似解,即数值解。以下讨论的优化算法都是这类基于数值方法的算法。


1.SGD(随机梯度下降)

 如果使用梯度下降(GD),每次自变量迭代的计算开销为O(n),它随着n线性增长。因此,当训练数据样本数很大时,梯度下降每次迭代的计算开销很高。

image.png

而随机梯度下降(stochastic gradient descent,SGD)减少了每次迭代的计算开销。在随机梯度下降的每次迭代中,我们随机均匀采样的一个样本索引i∈{1,…,n},并计算梯度∇fi(x)来迭代x。于是每次迭代的计算开销从梯度下降的O(n)降到了常数O(1)。


image.png


 我们还可以在每轮迭代中随机均匀采样多个样本来组成一个小批量,然后使用这个小批量来计算梯度。称为小批量随机梯度下降。通常,小批量随机梯度在每个迭代周期的耗时介于梯度下降和随机梯度下降的耗时之间。


image.png


2.Momentum(动量法)

 在SGD的每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。

 同一位置上,目标函数在竖直方向比在水平方向的斜率的绝对值更大。因此,给定学习率,梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。

 动量法依赖指数加权移动平均(exponentially weighted moving average)使得自变量的更新方向更加一致,从而降低发散的可能。


image.png


 其中,动量超参数γ满足0≤γ<1。当γ=0时,动量法等价于小批量随机梯度下降。

image.png

3. AdaGrad

  AdaGrad算法根据自变量在每个维度的梯度值的大小来调整各个维度上的学习率,并让目标函数自变量中每个元素都分别拥有自己的学习率,从而避免统一的学习率难以适应所有维度的问题。

image.png

ϵ是为了维持数值稳定性而添加的常数,如10−6。

 因为调整学习率时分母上的变量st一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。

image.png


4. RMSProp

image.png

RMSProp算法对AdaGrad算法做了一点小小的修改。

  不同于AdaGrad算法里状态变量st是截至时间步t所有小批量随机梯度gt按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均

image.pngimage.png

RMSProp同时具备Momentum& AdaGrad两种方法的优势

  但我们还没把 Momentum合并完全, RMSProp 缺少了 Momentum 中的红框部分。


5. Adam

47.png48.png49.png50.png51.png52.png53.png

Adam方法的基本思路更像是融合Momentum和AdaGrad二者的优点, Adam算法在RMSProp算法的基础上对小批量随机梯度也做了指数加权移动平均。

 Adam的优点主要在于经过偏置校正(使过去各时间步小批量随机梯度权值之和为1)后,每一次迭代学习率都有个确定范围,使得参数比较平稳。

 大多数时候, 使用 Adam 都能又快又好的达到目标, 迅速收敛。


补充:Optimizer 优化器



54.png55.png

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象

56.png




相关文章
|
8天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
54 9
|
25天前
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
208 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
28天前
|
机器学习/深度学习 传感器 人工智能
深度学习之自主学习和任务规划
基于深度学习的自主学习和任务规划,是指通过深度学习算法使人工智能(AI)系统能够自主地从环境中学习,并根据特定的目标和任务,规划出有效的解决方案。
43 3
|
4天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
19 7
|
27天前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
129 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
18天前
|
机器学习/深度学习 存储 自然语言处理
深度学习之少样本学习
少样本学习(Few-Shot Learning, FSL)是深度学习中的一个重要研究领域,其目标是在只有少量标注样本的情况下,训练出能够很好地泛化到新类别或新任务的模型。
16 2
|
24天前
|
机器学习/深度学习 自然语言处理 计算机视觉
深度学习中的迁移学习技术
【10月更文挑战第11天】 本文探讨了深度学习中的迁移学习技术,并深入分析了其原理、应用场景及实现方法。通过实例解析,展示了迁移学习如何有效提升模型性能和开发效率。同时,文章也讨论了迁移学习面临的挑战及其未来发展方向。
|
25天前
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
300 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
|
29天前
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
24 1
|
8天前
|
安全 搜索推荐 机器学习/深度学习
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】在人工智能的推动下,个性化学习系统逐渐成为教育领域的重要趋势。深度学习作为AI的核心技术,在构建个性化学习系统中发挥关键作用。本文探讨了深度学习在个性化推荐系统、智能辅导系统和学习行为分析中的应用,并提供了代码示例,展示了如何使用Keras构建模型预测学生对课程的兴趣。尽管面临数据隐私和模型可解释性等挑战,深度学习仍有望为教育带来更个性化和高效的学习体验。
33 0

热门文章

最新文章