嗨,我正在学习关于迁移学习的pytorch教程。(https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html)
model.training是用来干什么的??
enter def visualize_model(model,num_images=6):
was_training=model.training
model.eval()
images_so_far=0
fig=plt.figure()
with torch.no_grad():
for i, (inputs,labels) in enumerate(dataloaders['val']):
inputs=inputs.to(device)
labels=labels.to(device)
outputs=model(inputs)
_,pred=torch.max(outputs,1)
for j in range(inputs.size()[0]):
images_so_far+=1
ax=plt.subplot(num_images//2,2,images_so_far)
ax.axis('off')
ax.set_title('predicted: {}'.format(class_names[preds[j]]))
imshow(inputs.cpu().data[j])
if images_so_far==num_images:
model.train(mode=was_training)
return
model.train(mode=was_training)code here我不明白"model.train(model=was_training)“的意思。有什么帮助吗??非常感谢
发布于 2021-09-29 07:12:20
我认为这会有所帮助(link)
所有的训练都有一个内部的nn.Modules属性,通过调用model.train()和model.eval()来改变模型的行为。
was_training变量存储模型的当前训练状态,调用model.eval(),并在最后使用model.train(training=was_training)重置状态。
您可以在pytorch讨论论坛中找到很好的答案;)
发布于 2021-09-29 08:01:37
我想知道为什么他们在测试会话中使用
model.train。为什么他们要把这些代码放在with torch.no_grad()中?这不是很明显吗,was_training=false?
train的用法有点误导,因为train 也可用于将模型置于推理(评估)模式
>>> model.train(mode=True)
>>> model.training
True # <- train mode
>>> model.train(mode=False)
False # <- eval mode我同意这并不理想,更恰当的表述应该是:
>>> model.eval()https://stackoverflow.com/questions/69371652
复制相似问题