Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python model.eval()在pytorch中做什么?_Python_Machine Learning_Deep Learning_Pytorch - Fatal编程技术网

Python model.eval()在pytorch中做什么?

Python model.eval()在pytorch中做什么?,python,machine-learning,deep-learning,pytorch,Python,Machine Learning,Deep Learning,Pytorch,我正在使用,在某些情况下看到了model.eval() 我知道它应该允许我“评估我的模型”,但我不知道什么时候应该和不应该使用它,或者如果关闭它,如何关闭它 我想运行上面的代码来训练网络,并且能够在每个阶段运行验证。我仍然无法执行此操作。model.eval()是模型中某些特定层/部分的一种开关,这些层/部分在训练和推理(评估)期间表现不同。例如,退出层、BatchNorm层等。您需要在模型求值期间关闭它们,.eval()将为您执行此操作。此外,评估/验证的常见做法是使用torch.no_gra

我正在使用,在某些情况下看到了
model.eval()

我知道它应该允许我“评估我的模型”,但我不知道什么时候应该和不应该使用它,或者如果关闭它,如何关闭它

我想运行上面的代码来训练网络,并且能够在每个阶段运行验证。我仍然无法执行此操作。

model.eval()
是模型中某些特定层/部分的一种开关,这些层/部分在训练和推理(评估)期间表现不同。例如,退出层、BatchNorm层等。您需要在模型求值期间关闭它们,
.eval()
将为您执行此操作。此外,评估/验证的常见做法是使用
torch.no_grad()
model.eval()
配合使用来关闭梯度计算:

#评估模型:
model.eval()
使用手电筒。无梯度()
...
输出数据=模型(数据)
...
但是,不要忘记在评估步骤后返回到
培训
模式:

#培训步骤
...
模型列车()
...
是一种:

eval()
将模块设置为评估模式

这仅对某些模块有任何影响。有关特定模块在培训/评估模式下的行为的详细信息,请参阅特定模块的文档,如果它们受到影响,例如,
BatchNorm

这相当于


Umang Gupta很好地解释了相反的方法。

对上述答案的额外补充:

我最近开始使用,它在培训验证测试管道中封装了很多样板文件

除此之外,它允许
train\u步骤
validation\u步骤
回调来包装
eval
train
,从而使
model.eval()和
model.train()
近乎冗余,因此您永远不会忘记

model.eval()
在训练模式下设置模型:

标准化层1使用每批统计数据
•激活
退出层2

在评估(推断)模式下设置模型:

•标准化层使用运行统计信息
•取消激活
退出层

相当于
模型。训练(错误)

torch.no_grad()
是一个上下文管理器,因此您应该以
的形式与torch一起使用它。no_grad():
,这保证了在离开
时,块模型将自动打开梯度计算,因此,
model.train()
model.eval()
仅对层有效,对梯度无效,默认情况下,渐变补偿是打开的,但在评估过程中使用上下文管理器
torch.no_grad()
可以轻松关闭渐变补偿,然后在末尾自动打开渐变补偿为什么我们需要在评估时关闭渐变补偿?@shtse8我们在评估过程中不计算或使用渐变,因此,关闭自动加载将加快执行速度并减少内存usage@NagabhushanSN对它们是递归工作的,对于self.children():module.train(False)
和self.children():module.train(True)
.train(),
.train()这是否回答了您的问题?是否有用于检测模型是否处于评估模式的标志?e、 g.
mdl.is_eval()
?你能详细说明你的第二点吗?对不起,我看到
删除
而不是
详细说明
。对于这个问题,有点难选:Lightning为您处理训练/测试循环,您只需定义
train\u step
val\u step
等等。
model.eval()
model.train()
都是在后台完成的,您不必担心它们。我建议你看一些他们的视频,这是一个值得30分钟的投资。是否有一个标志来检测模型是否处于评估模式?e、 g.
mdl.is_eval()
?是的,@CharlieParker
self.training
标志如所述