1.model.train()
- 官方文档
启用 Batch Normalization 和 Dropout。 如果模型中有BN层(Batch Normalization)和 Dropout,需要在训练时添加model.train()。 model.train()是保证BN层能够用到每一批数据的均值和方差。对于Dropout,model.train()是随机取一部分网络连接来训练更新参数。
让model变成训练模式,此时 dropout和batch normalization的操作在训练q起到防止网络过拟合的问题
2.model.eval()
2.1官方文档
不启用 Batch Normalization 和 Dropout。 如果模型中有BN层(Batch Normalization)和Dropout,在测试时添加model.eval()。model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。
训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有BN层和Dropout所带来的的性质。
在做one classification的时候,训练集和测试集的样本分布是不一样的,尤其需要注意这一点。
2.2 别的解释
model.eval() 作用等同于 self.train(False) 简而言之,就是评估模式。而非训练模式。 在评估模式下,batchNorm层,dropout层等用于优化训练而添加的网络层会被关闭,从而使得评估时不会发生偏移
2.3 别的解释
在模型测试阶段使用
pytorch会自动把BN和DropOut固定住,不会取每个batchsize的平均,而是用训练好的值。 不然的话,有输入数据,即使不训练,它也会改变权值。
一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大;
- 测试模型的时候
一般model.eval() 和 with torch.no_grad() 一起使用。
model.eval()
with torch.no_grad():
...
out_data = model(data)
...
3.model.parameters()
model.parameters()保存的是Weights和Bais参数的值。
4.torchvision 主要包含三部分
4.1 models
提供深度学习中各种经典网络的网络结构以及预训练好的模型,包括 AlexNet 、VGG 系列、ResNet 系列、Inception 系列等;
4.2 datasets
datasets: 提供常用的数据集加载,设计上都是继承 torch.utils.data.Dataset,主要包括 MNIST、CIFAR10/100、ImageNet、COCO等;
4.3 transforms
提供常用的数据预处理操作,主要包括对 Tensor 以及 PIL Image 对象的操作;
|