Confusión sobre model.train () [duplicado]

Sep 07 2020

Soy un principiante en pytorch. Vi en github que algunos modelos de aprendizaje profundo tienen model.train () y otros no, pero pueden ejecutarse normalmente. Quiero saber si model.train () es necesario. cual es el efecto?

Respuestas

1 hkchengrex Sep 07 2020 at 13:06

trainel modo o el evalmodo solo importa cuando tiene módulos que se comportan asimétricamente (por ejemplo, BatchNorm, Dropout) en el entrenamiento / prueba. Me gustaría enfatizar que no afecta en absoluto la acumulación de gradientes. Incluso con módulos asimétricos, se puede entrenar perfectamente un modelo en evalmodo. Algunos hacen esto para ahorrar memoria en el entrenamiento usando un modelo ImageNet previamente entrenado.

Si no tiene módulos asimétricos, no importa en absoluto.

De forma predeterminada, todos los módulos comienzan con training=True.

2 gspr Sep 07 2020 at 12:25

trainy su contraparte evalcambia el modelo entre el modo de formación y el de evaluación.

En el modo de entrenamiento, los gradientes seguidos generalmente se actualizan en cada evaluación del modelo. Esto es necesario para realizar el descenso de gradiente utilizado para el entrenamiento. En el modo de evaluación, no lo son.