1. ホーム
  2. ピトーチ

RuntimeError: CUDAエラー: 不正なメモリアクセスが発生しました。

2022-03-01 10:58:01

テキスト認識にpytorchを使用した場合、タイトルにエラーが発生します。

1. トレーニングの前に以下の文を追加してください。

torch.backends.cudnn.benchmark = True

は動作しませんでした。

2. batch_sizeを64から32に変更します。

を使用しませんでした。

3. トレーニングの前に以下の文を追加します。

torch.cuda.set_device(id)

ビデオカードは1枚しかないので、id=0.パースビューです。 https://discuss.pytorch.org/t/runtime-error-77/9392/9

うまくいかなかった

4. を解決する方法です。

参考 https://discuss.pytorch.org/t/weird-cuda-illegal-memory-access-error/8848/9

エラーの理由 4000語の一般的な単語からなる独自の辞書を持っているので、最終的なネットワークの出力層は4000の次元を持っています。学習中に、学習セットの画像に辞書にない中国語の単語があると、それがその辞書に追加されるので、辞書長が4000でなくなり、エラーが報告されました。

解決方法 トレーニングセットに含まれる新しい文字をあらかじめ辞書に追加しておくか、トレーニング中に新しい文字を辞書に追加しないかのどちらかです。

2019.07.01に更新しました。

最近またこの問題が出てきて、長い間確認した結果、pythonの使い方に不慣れなことが原因であることがわかりました。

テキスト認識用のデータは非常に大きいので、まずはlmdbのデータベースにしてみます。 https://zhuanlan.zhihu.com/p/70359311

タグファイルの各行は、以下の通りです。

'0019365.jpg Attack of the Giants\n'

txtファイルから読み込んでいるため、最後に改行があります。

今度は、画像名とテキストタグを別々に読み出す必要がある、その

line = '0019365.jpg Attack of the Giants\n'
print(line.split())

と出力されます。['0019365.jpg', 'Attack of the Giants'] そうです、改行が自動的に削除されるのです。


そして、テキストタグにスペースがある場合、上記は機能しません。

line = '0019365.jpg Attack of the Giants Soldier Leader \n'
print(line.split())

と出力されます。['0019365.jpg', 'Attack of the Giants', 'Soldier Leader'] の3つに分割されています。

そこで、代わりに次の方法を使いました。

line = '0019365.jpg Attack of the Giants Soldier Leader \n'
print(line.split(' ', 1))

と出力されます。['0019365.jpg', 'Attack of the Giants 兵長n'] で、2つに分割されているだけですが、!!! 改行が削除されない!!!! これは今まで気づかなかったことなので、改行と合わせてテキストタグとして扱われているのです。

それから、タイトルにエラーがありましたね。

著者略歴

ソフトウェア開発エンジニア歴5年、985大学卒の非大学生プログラマー、プログラミングとオープンソースへの情熱を持つAdeと申します。

この公開番号【プログラマーAde】は、コンピュータの構成原理、データ構造とアルゴリズム、コンピュータネットワーク、オペレーティングシステム、データベース、Linuxなどを含むがこれらに限らないあらゆるコンピュータ乾物の共有に焦点を当てています。

ここで何かを得て、良いプログラマーに磨きをかけることができると信じています。一緒に応援しましょう〜。

よりハードコアな技術やプログラミングのヒントについては、[Programmer Ade]をフォローするとよいでしょう。