ValueError: Input contains NaN, infinity or a value too large for dtype(‘float32)の対処法

プログラミング
スポンサーリンク

torchを使った計算を行った際に、np.saveで ValueError: Input contains NaN, infinity or a value too large for dtype(‘float32)のエラーが出て困ったので、その時の対処法を自分のメモ用にまとめておきます。

同じエラーが出た人の助けになれば幸いです。

スポンサーリンク

対処法

対処法だけ知りたい場合は,こちらをご覧ください.

対処法その1

エラーが出ている行が問題となっているのではなく,そもそもそれ以前の計算が間違っている.

自分は,これが原因でエラーが出ていました.

loopで,間違った自作の関数を繰り返し計算を行ったことで,inputに大きな値が入力されたことでエラーが出てしまいました.

対処法としては,それまでのコードに,inputを計算する部分で間違った処理を加えている可能性があり,それを直せば良いです.

対処法その2

これは,自分は試しても意図した結果を出力できなかったので使えなかったのですが,別の事例で使えるかもしれないため,残しておきます.

input = torch.clamp(input, min=-10, max=10)

のように,入力する値をあらかじめクランプするという対策です.

この例では,-10から10から外れた値がある場合は-10か10に変更するといった処理を加えるというコードです.

これにより,エラーは出なくなります.

スポンサーリンク

このエラーの意味

ValueError: Input contains NaN, infinity or a value too large for dtype(‘float32)の意味は,

「 入力に NaN、無限大、または dtype(‘float32) に大きすぎる値」が含まれていることを意味しています.

おまけ

ここでは,エラーが出る前に,inputの形状や,inputにどんな値が入っているのかをprint

した上で,エラーを表示させるコードを紹介します.

inputの中身が気になる場合は試してみるのをお勧めします.