!pip install efficientnet_pytorch -q
import torch
import torch.nn as nn
import efficientnet_pytorch as efn
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
device
model = efn.EfficientNet.from_name('efficientnet-b0')
model = model.to(device)
img = torch.ones((2, 3, 680, 680))*0.5
img = img.to(device)
preds1 = model(img)
preds2 = model(img)
preds3 = model(img)
print(preds1[0][0])
print(preds2[0][0])
print(preds3[0][0])
del model, img, preds1, preds2, preds3
preds1、preds2和preds3是不同的。我对这一点感到困惑,模型是一样的,输入也是一样的,为什么预测是不同的?
tensor(0.2599, grad_fn=<SelectBackward>)
tensor(0.1364, grad_fn=<SelectBackward>)
tensor(0.1263, grad_fn=<SelectBackward>)
发布于 2020-07-03 20:49:24
哇,解决了!我检查了Efficientnet-pytorch源代码,突然发现我应该将模型转换为eval()模式。
现在预测是一样的!!
model = efn.EfficientNet.from_name('efficientnet-b0')
model = model.to(device)
_ = model.eval() ## hey, look here!!
img = torch.ones((2, 3, 680, 680))*0.5
img = img.to(device)
preds1 = model(img)
preds2 = model(img)
preds3 = model(img)
print(preds1[0][0])
print(preds2[0][0])
print(preds3[0][0])
https://stackoverflow.com/questions/62714886
复制相似问题