(总)基于Cifar10数据集的LeNet与ResNet网络了解这两个网络

1神经网络的构建 

Pytorch中文文档
Lenet5网络程序:

2主函数的设置

2.1交叉熵损失函数 nn.CrossEntropyLoss()

criteon = nn.CrossEntropyLoss().to(device) #交叉熵函数

2.2优化器函数完成网络参数管理  optim.Adam(model.parameters(),lr=1e-3)

optimizer = optim.Adam(model.parameters(),lr=1e-3)   #Module.parameters()函数实现与网络参数管理

为了使用torch.optim,先构造一个优化器Optimizer(优化器),用来保存当前的状态,根据计算得到的梯度来更新参数.Module.parameters()函数实现与网络参数管理.

(----------------------------------------------分界线-----------------------------------------------)

Pytorch-model.train和model.eval

在训练模型时会在前面加上:model.train().在测试模型时在前面使用model.eval().同时发现,如果不使用这两种语句,程序也可以运行。这两个方法是针对网络train和eval时采用不同方式(Batch Normalization和Droput.)

使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval,eval()时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值,不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大.

目的在于此:

model.train() :启用 BatchNormalization 和 Dropout;
model.eval() :不启用 BatchNormalization 和 Dropout.

2.3 神经网络中的超参数(为什么要批次训练呀?)

随机梯度下降(Stochastic Gradient Descent,简称SGD):SGD是一种用于训练机器学习算法的优化算法.该算法的工作是找到一组内部模型参数进行优化。

优化是一种搜索过程,将此搜索视为学习。优化算法称为‘梯度下降’,其中梯度是指误差梯度的计算,下降是指沿着该斜率向下移动到某个最小误差水平。该算法的迭代的。

这意味着搜索过程发生在多个不连续的步骤上,每个步骤都希望略微改进模型参数。每一步都需要使用模型和当前的一组内部参数对一些样本进行预测,将预测与实际预期结果进行比较,计算误差,并使用误差更新内部模型参数。该更新过程对于不同的算法是不同的,但是在人工神经网络的情况下,使用反向传播更新算法

Sample(什么是Sample?):Sample是单行数据。它包括用于算法中的输入和用于与预测进行比较并计算错误的输出.训练数据集由许多行数据组成,例如许多Sample。Sample也可以称为实例,观察,输入向量或特征向量。

Batch:Batch大小是一个超参数,用于定义在更新内部模型参数之前要处理的样本数。将批处理视为循环迭代多个样本并进行预测。在批处理技术时,将预测与真实变量进行比较,并计算误差。从该误差中,更新算法用于改进模型,例如沿误差梯度向下移动。

训练数据集可以分为多个Batch.

批量的叫法不同:

a当批量是一个样本的大小时,学习算法称为随机梯度下降。

b当所有训练样本用于创建一个Batch时,学习算法称为批量梯度下降。

c当批量大小超过一个样本并小于训练数据集的大小时,学习算法称为小批量梯度下降。

批量梯度下降。批量大小=训练集的大小

随机梯度下降。批量大小= 1

小批量梯度下降。1 <批量大小<训练集的大小(参考这个)

在小批量梯度下降的情况下,流行的批量大小包括32,64128个样本。您可能会在文献和教程中看到这些值在模型中使用。

Epoch:

Epoch数是一个超参数,它定义了学习算法在整个训练数据集中的工作次数。一个Epoch意味着训练数据集中的每个样本都有机会更新内部模型参数。Epoch由多个Batch组成。

如上所述,具有一批的Epoch称为批量梯度下降学习算法。您可以将for循环放在每个需要遍历训练数据集的epoch上,在这个for循环中是另一个嵌套的for循环,它遍历每批样本,其中一个批次具有指定的“批量大小”样本数。

 epochs 数量传统上很大,通常是数百或数千,允许学习算法运行直到模型的误差被充分地最小化了。您可能会看到文献和教程设置为10,100,500,1000和更大的时期数量的示例。通常创建线图,其显示沿x轴的时间以及模型在y轴上的误差或技能。这些图有时被称为学习曲线。这些图可以帮助诊断模型是否已经过度学习,学习不足或者是否适合训练数据集。

诊断网络模型的过度拟合和欠拟合

Batch和Epoch有什么区别?

Batch大小是在更新模型之前处理的多个样本。Epoch数是通过训练数据集的完整传递次数。批处理的大小必须大于或等于1且小于或等于训练数据集中的样本数。可以将epoch设置为1和无穷大之间的整数值。您可以根据需要运行算法,甚至可以使用除固定数量的epoch之外的其他条件来停止算法,例如模型错误随时间的变化(或缺少变化)。它们都是整数值,并且它们都是学习算法的超参数,例如学习过程的参数,而不是学习过程找到的内部模型参数。您必须为学习算法指定batch大小和epoch数。如何配置这些参数没有固定的规则。您必须尝试不同的值,看看哪种方法最适合您的问题。

例子

最后,让我们用一个小例子来说明这一点。

假设您有一个包含200个样本(数据行)的数据集,并且您选择的Batch大小为5和1,000个Epoch。

这意味着数据集将分为40个Batch,每个Batch有5个样本。每批五个样品后,模型权重将更新。这也意味着一个Epoch将涉及40个Batch,模型更新40次。

有1000个Epoch,模型将传递整个数据集1,000次。在整个训练过程中,总共有40,000Batch,模型更新40,000次.

2.4 训练和测试过程

1.3个for循环过程。一个大循环,两个小循环;

2.model还是那个model;

3.计算损失函数;

猜你喜欢

转载自blog.csdn.net/qq_31244453/article/details/111808467