88问答网
所有问题
pytorch踩坑之model.eval()和model.train()输出差距很大
如题所述
举报该问题
其他回答
第1个回答 2022-07-28
问题描述:
本人使用pytorch1.5版本,构建EfficientNet网络,在训练之前使用model.train()设置为训练模式。每次训练结束后进行验证集的推理测试;对于含有dropout和batchnorm层的神经网络在推理前需要用model.eval()设置dropout和batchnorm的冻结。但是对于推理结果,不同的输入,具有相同的输出;错误率很高,并且loss值也于训练时差距巨大。
解决方法:
这个错误可能是由于在batchnorm中的动量(momentum)设置而导致。在进行推理时,设置较大的动量值可以解决这个问题。如下:
nn.BatchNorm2d(out_planes, eps=1e-3, momentum=1))
参考:
[1]
https://www.kaggle.com/c/recursion-cellular-image-classification/discussion/101997
[2]
https://github.com/pytorch/pytorch/issues/4741
[3]
https://discuss.pytorch.org/t/model-eval-gives-incorrect-loss-for-model-with-batchnorm-layers/7561/22
相似回答
pytorch
默认调用
train
吗
答:
pytorch
不是默认调用
train
。使用
PyTorch
进行训练和测试时一定注意要把实例化的
model
指定train/eval,
eval()
时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值
模型解释-LIME的原理和实现
答:
对于这个例子的理解, 可以参考文章:
Pytorch
例子演示及LIME使用例子 这一部分在这里不是很重要, 就不详细进行说明了. 我们使用Pytorch训练好的模型叫 full
Model
, 导入的数据集为 XData和YData .我们需要定义一个函数, 输入的是模型和x, 输出的是预测的概率. 定义分类器 defbatch_predict(data,...
很小众却很惊艳的诗
答:
def__init__(self,model_path,device='cpu'):self.model=GPT2LMHeadModel.from_pretrained(model_path)self.tokenizer=GPT2Tokenizer.from_pretrained(model_path)self.device=device self.model.to(device)self.
model.eval()
defgenerate(self,prompt,length=50,temperature=1.0):input_ids=self.tokeni...
pytorch
从哪个版本开始集成了hub的功能?
答:
但具体也不知道在哪个版本集成了。但是最近新一点的版本基本上都集成了。另外你也可以用这个代码来测试一下,如下。model = torch.hub.load('
pytorch
/vision:v0.4.2', 'deeplabv3_resnet101', pretrained=True)print
(model.eval())
希望可以帮助到你。
自学围棋的AlphaGo Zero,你也可以造一个
答:
策略网络就是普通的CNN了,里面有个批量标准化(Batch Normalization) ,还有一个全连接层,输出概率分布。1classPolicyNet(nn.Module):2def__init__(self, inplanes, outplanes):3 super(PolicyNet, self).__init__()4 self.outplanes = outplanes5 self.conv = nn.Conv2d(inplanes, 1, kernel_size=1)...
大家正在搜
pytorch tutorial
pytorch handbook
pytorch dataset
pytorch conv2d
pytorch lstm
pytorch中文手册
pytorch 百科
pytorch库
pytorch教程