pytouchの下でmulti-target not supported atが現れる一つの可能な原因を解決します。
3014 ワード
交差エントロピー損失関数を使用する場合、targetの形状はlabelの形状と一致するか、batchizeの一つの次元しかないはずである。
このような【batch szie】であると、上記のエラーが発生します。
squeee()関数で緯度を下げてみます。
スクウェアの使い方が分からないなら、
この文章は参考になる。pytochのunsqueeeとスクウェアの使い方
これはただ可能な原因です。
追加:pytouch使用中に発生した問題
1.ロードモデルパラメータファイルの場合、touch.cuda.is_を提示します。available()is False。
pytochの公式ホームページによってまたpytochをインストールしました。直接に清華源を使うのではなく、pip install touchを実行します。
2.Cross EntropyLossを使用する場合、第一のパラメータはネットワーク出力値、Float Tensorタイプ、第二のパラメータは目標値、LongTensorタイプであることが要求されます。そうでなければ
データ読み出しの反復の中で、targetのタイプをint 64ビットに変換する必要がある:targt=target.astype(np.int 64)、このようにして、出力のtargetタイプはtoch.cdca.LongTensorである。あるいは使う前にTensor.typeを使って変換します。
3.
scores、captionsの次元とF.cros_entropy()関数に要求される次元は一致しません。
例えばエラーの次元はscores=[batch,vocab_]です。size),captions=[batch,1]
解決:
4.pytochトレーニング中に大量のCPUリソースを使用する
pycharmを使って(https://github.com/Joyce94/cnn-text-classification-pytorch)pytouchプログラムを実行すると、Linuxサーバで複数のプロセスを開いて、サーバの大量のCPUを占有して、windows 10上でこのプログラムを実行すると、本機のCPUとメモリが全部食べられてしまうのは、trin.pyの中に大量のデータトレーニング処理があり、複数のプロセスを開いて、大量のCPUとプロセスを占用するからです。
当機window 10
linuxサーバは複数のプロセスを開始しました。
Linuxサーバーは大量のCPUを占有しています。
pytouchでは(http://pytorch.org/docs/master/multiprocessing.html)murliprocessingマルチプロセス管理を提供しています。その中にはPoolプロセスプール、Processなどのプロセス管理があります。
しかし、一番簡単なのも一番いい解決方法です。
touch.set_numthreads(int thread)は、windows問題をよく解決し、参照することができますが、linuxサーバにはまだいくつかの問題があります。export OMP_。NUM_THREADS=1はLinux問題を解決できます。
経験証:export OMP_NUM_THREADS=1は、確かにpycaffe/pytouchでCPUの使用率を効果的に低減し、プログラムの実行速度を向上させることができます。プログラムにはこれほどの計算量が必要ではないかもしれませんが、多くのスレッドを開いて並列に同じ計算を行い、最後に同期結果が必要となり、大量の計算量を浪費してしまいました。
5.pytouchフレームの下でモジュールをコンパイルする時in<module>に出会う
6.pytochにGPUを設置し、os.environ['CUDA_VISIBLE_DEVICES'='X'をメインプログラムの先頭に置くと、GPUの設定が無効になります。
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。
このような【batch szie】であると、上記のエラーが発生します。
squeee()関数で緯度を下げてみます。
スクウェアの使い方が分からないなら、
この文章は参考になる。pytochのunsqueeeとスクウェアの使い方
これはただ可能な原因です。
追加:pytouch使用中に発生した問題
1.ロードモデルパラメータファイルの場合、touch.cuda.is_を提示します。available()is False。
pytochの公式ホームページによってまたpytochをインストールしました。直接に清華源を使うのではなく、pip install touchを実行します。
2.Cross EntropyLossを使用する場合、第一のパラメータはネットワーク出力値、Float Tensorタイプ、第二のパラメータは目標値、LongTensorタイプであることが要求されます。そうでなければ
データ読み出しの反復の中で、targetのタイプをint 64ビットに変換する必要がある:targt=target.astype(np.int 64)、このようにして、出力のtargetタイプはtoch.cdca.LongTensorである。あるいは使う前にTensor.typeを使って変換します。
3.
RuntimeError: multi-target not supported at /pytorch/torch/lib/THCUNN/generic/ClassNLLCriterion.cu
loss += F.cross_entropy( scores, captions )
エラーの原因:scores、captionsの次元とF.cros_entropy()関数に要求される次元は一致しません。
例えばエラーの次元はscores=[batch,vocab_]です。size),captions=[batch,1]
解決:
loss += F.cross_entropy( scores, captions.squeeze() )
注、このスコアはN*C次元、Cはカテゴリ数を指す必要があります。4.pytochトレーニング中に大量のCPUリソースを使用する
pycharmを使って(https://github.com/Joyce94/cnn-text-classification-pytorch)pytouchプログラムを実行すると、Linuxサーバで複数のプロセスを開いて、サーバの大量のCPUを占有して、windows 10上でこのプログラムを実行すると、本機のCPUとメモリが全部食べられてしまうのは、trin.pyの中に大量のデータトレーニング処理があり、複数のプロセスを開いて、大量のCPUとプロセスを占用するからです。
当機window 10
linuxサーバは複数のプロセスを開始しました。
Linuxサーバーは大量のCPUを占有しています。
pytouchでは(http://pytorch.org/docs/master/multiprocessing.html)murliprocessingマルチプロセス管理を提供しています。その中にはPoolプロセスプール、Processなどのプロセス管理があります。
しかし、一番簡単なのも一番いい解決方法です。
touch.set_numthreads(int thread)は、windows問題をよく解決し、参照することができますが、linuxサーバにはまだいくつかの問題があります。export OMP_。NUM_THREADS=1はLinux問題を解決できます。
経験証:export OMP_NUM_THREADS=1は、確かにpycaffe/pytouchでCPUの使用率を効果的に低減し、プログラムの実行速度を向上させることができます。プログラムにはこれほどの計算量が必要ではないかもしれませんが、多くのスレッドを開いて並列に同じ計算を行い、最後に同期結果が必要となり、大量の計算量を浪費してしまいました。
5.pytouchフレームの下でモジュールをコンパイルする時in<module>に出会う
raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.
解決策:pytouchバージョンは他のライブラリのバージョンと一致しません。ファッションは1.0.0で、バージョンを0.4.0に下げたら問題が解決されます。6.pytochにGPUを設置し、os.environ['CUDA_VISIBLE_DEVICES'='X'をメインプログラムの先頭に置くと、GPUの設定が無効になります。
以上は個人の経験ですので、参考にしていただければと思います。間違いがあったり、完全に考えていないところがあれば、教えてください。