Confusão sobre model.train () [duplicado]

Sep 07 2020

Eu sou um iniciante em pytorch. Eu vi no github que alguns modelos de aprendizado profundo têm model.train (), e outros não, mas podem ser executados normalmente. Quero saber se model.train () é necessário? qual é o efeito?

Respostas

1 hkchengrex Sep 07 2020 at 13:06

trainmodo ou evalmodo só importa quando você tem módulos que se comportam assimetricamente (por exemplo, BatchNorm, Dropout) no treinamento / teste. Eu gostaria de enfatizar que isso não afeta de forma alguma o acúmulo de gradiente. Mesmo com módulos assimétricos, pode-se perfeitamente treinar um modelo no evalmodo. Alguns fazem isso para economizar memória no treinamento usando um modelo ImageNet pré-treinado.

Se você não tem módulos assimétricos, não importa de forma alguma.

Por padrão, todos os módulos começam com training=True.

2 gspr Sep 07 2020 at 12:25

traine sua contraparte evalalterna o modelo entre o modo de treinamento e avaliação.

No modo de treinamento, os gradientes rastreados são geralmente atualizados em cada avaliação do modelo. Isso é necessário para realizar a descida gradiente usada para o treinamento. No modo de avaliação, eles não são.