赞
踩
- # 导入包
- import torch
- from torch import nn
- from d2l import torch as d2l
- #定义网络,前馈神经网络,适用于图像分类。
- #输入图像首先被展平,之后通过两个全连接层,中间使用激活函数ReLU,最后输出具有10个类别的概率分布。
- net = nn.Sequential(nn.Flatten(), # 将输入的图片展平成一维向量
- nn.Linear(784, 256),#线性层,输入大小为784.输出大小为256
- nn.ReLU(), # ReLU激活函数,所有负值置0,保持正值不变。引入非线性性质,有助于网络学习复杂的函数
- nn.Linear(256, 10)) # 第二层,接收长度为256的,并将其转换为长度为10的输出向量。对应Fashion MNIST数据集中的类别数量
-
- def init_weights(m): # 初始化参数
- if type(m) == nn.Linear:
- nn.init.normal_(m.weight, std=0.01) # m.weight未初始化之前是0
-
- net.apply(init_weights) # 网络的每一层的权值都进行初始化
-
- batch_size, lr, num_epochs = 256, 0.1, 10 # 一些超参数
- loss = nn.CrossEntropyLoss(reduction='mean') # 交叉熵损失函数
- trainer = torch.optim.SGD(net.parameters(), lr=lr) # 训练器,也就是优化器,选择随机梯度下降
-
- train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
-
- d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer) # 开始训练
- d2l.plt.show() # 显示训练进程

模型的参数是什么?
定义: 模型参数是指模型内部学习的权重和偏差,它们是通过训练数据自动学习得到的。
特点:模型参数的值是根据训练数据调整的,目标是使模型能够最好地拟合训练数据,从而提高模型的性能。
示例:在线性回归中,模型参数包括权重(斜率)和偏差(截距)
超参数是什么?
定义: 超参数是在训练模型之前设置的,它们不是通过训练数据学习得到的,而是在模型训练之前手动选择的。
特点:超参数的值影响着模型的学习过程,但它们不是通过训练数据调整的。选择合适的超参数对于模型的性能和泛化能力至关重要。
示例:在神经网络中,学习率、隐藏层的数量和大小等都是超参数。
超参数:
1.batch_size:训练中每个批次中包含的样本数量。在每个训练步骤中,模型会计算损失并更新参数(这里的参数指的是神经网络中的权重w和偏置b)的梯度,这个过程是基于每个批次的数据进行的。较大的batch_size可以提高训练效率,但也可能会导致内存不足或者训练不稳定
2.lr(Learing rate):学习率是一个控制模型参数更新步长的参数。它决定了每次参数更新中应该沿梯度的方向移动多远。较小的学习率可能会导致模型的训练过慢。较大的学习率可能导致模型在损失曲面上跳动。
3.num_epochs:这是整个训练数据集被遍历的次数,也成为训练的轮数。适当的epoch应该让模型学习到足够的数据而不过拟合。
上述模型训练步骤的基本流程:
1.接收数据:模型接收一个批次的输入数据
2.前向传播:通过前向传播计算模型的预测输出
3.损失计算:计算预测输出与实际标签之间的损失
4.反向传播:通过反向传播计算损失相对于模型参数的梯度
5.参数更新:使用优化算法(如随机梯度下降)根据梯度更新模型的参数,以减少损失。
6.重复:重复以上步骤,处理下一个batch_size的数据,直至处理完整个训练的数据集。这称为一个epoch
这个过程通过多次迭代,通过不断地调整模型参数,使得模型逐渐学到数据的特征,从而提高在新数据上的泛化能力。
训练的结束时机:
1.固定的迭代次数(Epochs):设置一个预定义的迭代次数,当达到这个次数后结束训练。上面的代码就是固定epochs=10。要将整个训练集,进行10次训练。
2.早停(Early Stopping):监测验证集的性能,并在性能不再提升时停止训练。这是为了避免过度拟合,当模型在训练数据上表现得很好但在验证数据上表现不佳时(过拟合),说明模型可能过度拟合了训练数据。
3.损失收敛: 监测损失值,当损失值收敛到一个足够小的值时,可以认为模型已经足够拟合数据,训练结束
4.性能指标达标: 当模型在验证集或测试集上的性能达到预先定义的标准时,结束训练。
防止过拟合的方法:
1.使用验证集和早停(Early Stopping):监测模型在验证集上的性能,当性能不再提升时停止训练,避免过拟合。
2.正则化(Regularization):添加正则化项,限制模型参数的大小,防止模型过于复杂。
3.数据增强:对训练数据进行一些随机变换,增加数据的多样性,有助于模型更好地泛化。
4.减少模型复杂度:考虑使用简单的模型结构,避免过度拟合。
参数更新
在典型的随机梯度下降(Stochastic Gradient Descent,SGD)中,模型会在处理完每个batch_size的数据后计算损失并更新模型参数。
1.Batch Gradient Descent(批量梯度下降): 在每个 epoch 中使用整个训练数据集计算梯度和更新参数。这意味着在整个数据集上计算损失后才进行一次参数更新。
2.Mini-Batch Gradient Descent(小批量梯度下降): 使用一个小批量(而不是整个数据集)的数据计算梯度和更新参数。这是 SGD 的一种折中,可以更频繁地更新参数,同时减少计算的复杂性。
3.Online Learning(在线学习): 在处理每个样本后就更新参数。这是一种极端情况,适用于处理流数据或非常大的数据集。
4.动量(Momentum): 动量优化算法会考虑之前的梯度信息,以更平滑地更新参数。
5.Adagrad、RMSprop、Adam 等优化算法: 这些算法引入了不同的参数更新规则,考虑了梯度的历史信息以及自适应学习率的调整。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。