Pytorch soluciona la situación en la que el valor de pérdida aparece nan

pregunta

Al ejecutar el laboratorio, el valor de pérdida fue nan (como se muestra en la siguiente figura)
Insertar descripción de la imagen aquí

solución de problemas

Debido a que hay algunos juicios, la declaración se usa bd_index = torch.where(s_label != o_label)[0]para seleccionar los subíndices que cumplen las condiciones, lo que puede devolver una lista vacía (cuando no se cumplen las condiciones), porque la torch.log()función se usa para cálculos posteriores, por lo que si es una lista vacía , aparecerá loss = nan. Sin embargo, se deben analizar diferentes situaciones en detalle. La mejor manera de solucionar el problema es usar declaraciones with torch.autograd.detect_anomaly():para envolver el código de entrenamiento (como se muestra en la figura siguiente), de modo que el punto donde aparece el valor nulo se pueda identificar rápidamente. Ubicado (debe retirarse durante el entrenamiento normal, lo que arrastrará a baja velocidad)

Insertar descripción de la imagen aquí
Finalmente colocado torch.log()en todas partes , la solución final es agregar constantes log_prob = torch.log(prob + 1e-7)para que no haya valores nulos.

Ejecutar con éxito:
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_56039091/article/details/127675557
Recomendado
Clasificación