Unityプロジェクトでエージェント強化学習のプログラムを作成して、
いざPythonで学習しようとmlagents-learnコマンドを実行!
ても、エラーが…
この記事では、初心者がmlagents-learnコマンドを実行エラーを解消する方法に焦点を当てました。
『エラーの解消方法は?』
『エラーのパターンは?』
『どうやってエラー内容を分析するの?』
こんな疑問に答えます。
mlagents-learnコマンドのエラーで実行できない対処法
mlagents-learnコマンドを実行時にエラーが良く発生します。
エラーの対処法はで次の通り。シンプルです。
- エラー内容の確認
- エラーの和訳
- エラーの分析
- 分析結果の対応
まずは、落ち着いてエラー内容をみましょう。
エラー内容がチンプンカンプンの英語でも、日本語に和訳すれば何を言っているのか意外とわかります。
何をいっているかわかれば、分析もできて対応方法も簡単に思いつくのです。
エラー内容を落ち着いて分析すれば大丈夫!
食わず嫌いしないで、よくエラー内容を読んでみよう♪
私が実際にmlagents-learnコマンド実行時に発生したエラーと対処方法もお伝えします。
私が導入した環境は次の通りです。この環境でエラーが発生して対応しました。
エラーはPythonライブラリのバージョン互換性による問題がほとんど。
参考にしてください。
では、頑張ってエラーメッセージを解読して対応しましょー
『そもそもml-agentsって何?』という場合はこちら。
ケース1: protobufバージョンエラー
- エラー内容の確認
File "c:\python\unity-ml-agents\env\lib\site-packages\google\protobuf\descriptor.py", line 561, in __new___message.Message._CheckCalledFromGeneratedFile() TypeError: Descriptors cannot not be created directly.If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the protobuf package to 3.20.x or lower. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
- エラーの和訳&分析
プロトをすぐに再生できない場合、他の回避策としては以下のようなものが考えられる: 1. protobufパッケージを3.20.x以下にダウングレードする。 2. 2.PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=pythonに設定する(ただし、これは純粋なPythonパースを使用するため、かなり遅くなります)。
「protobufパッケージを3.20.x以下にダウングレードすればいい」
とわかりますね。次の対応でOKです。 - 対応:バージョンを合わせる
pip install protobuf==3.20
ケース2: numpyバージョンエラー
- エラー内容の確認
File "c:\python\unity-ml-agents\env\lib\site-packages\numpy\__init__.py", line 305, in __getattr__ raise AttributeError(__former_attrs__[attr]) AttributeError: module 'numpy' has no attribute 'float'. `np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here. The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecationsか
- エラーの和訳&分析
np.float`は、組み込み関数 `float` の非推奨のエイリアスです。 既存のコードでこのエラーを回避するには、`float`を単独で使用してください。 こうすることで動作が変更されることはなく、安全である。特に numpy のスカラ型が必要な場合は、ここで `np.float64` を使用する。 このエイリアスは、NumPy 1.20で非推奨となりました。 詳細とガイダンスについては、 https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations のリリースノートを参照してください。
『このエイリアスは、NumPy 1.20で非推奨となりました。』
とありますね。
1.20で非推奨なので、NumPy 1.19ならOKと分析しましょう。
次の対応でOKです。意外と簡単ですね。 - 対応:バージョンを合わせる
pip install numpy==1.19
ケース3: sixのエラー
- エラー内容の確認
File "c:\python\unity-ml-agents\env\lib\site-packages\torch\utils\tensorboard\writer.py", line 5, in
import six ModuleNotFoundError: No module named 'six' - エラーの和訳&分析
six' という名前のモジュールはありません
エラーを分析して再インストールすれば良いと判断しました。
次の対応で無事にエラーを解消です。 - 対応:再インストールする
pip uninstall six pip install six
以上で、Unity ML-Agentsの環境が正しく構築され、開発環境が準備されます。
各ステップでエラーが発生した場合は、エラーメッセージに従って対応策を実行してください。
エラーメッセージを見てもわからない場合は、検索でググって同じエラーの事例を探してみましょう。
「記事を読んでもわからないトコがある」「内容が変だよ」
という時は、お気軽にコメントください♪
「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
という時は、ココナラまで。メッセージもお気軽に♪
LINEでのお問合わせも受付中!
LINE公式アカウント
メッセージをお待ちしています!
- 応用情報技術者
- Oracle Master Gold
- Java SE Gold
- Java EE Webコンポーネントディベロッパ
- Python エンジニア認定データ分析
- 簿記2級