質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

3051閲覧

Unity強化学習のQiitaチュートリアルで「python learn.py CartPole --train」が実行できずに困っています。

aguroshou

総合スコア22

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

0クリップ

投稿2019/04/28 17:59

前提・実現したいこと

【Unity強化学習】自作ゲームで強化学習
こちらのサイトを見ながらチュートリアルを進めています。

発生している問題・エラーメッセージ

Anaconda Promptにて「python learn.py CartPole --train」を入力し、強化学習を行う際にエラーメッセージが表示されます。

(ml-agents) C:\Users\aguro\Downloads\ml-agents-0.4.0\ml-agents-0.4.0\python>python learn.py CartPole --train ▄▄▄▓▓▓▓ ╓▓▓▓▓▓▓█▓▓▓▓▓ ,▄▄▄m▀▀▀' ,▓▓▓▀▓▓▄ ▓▓▓ ▓▓▌ ▄▓▓▓▀' ▄▓▓▀ ▓▓▓ ▄▄ ▄▄ ,▄▄ ▄▄▄▄ ,▄▄ ▄▓▓▌▄ ▄▄▄ ,▄▄ ▄▓▓▓▀ ▄▓▓▀ ▐▓▓▌ ▓▓▌ ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌ ╒▓▓▌ ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓ ▓▀ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▄ ▓▓▌ ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄ ▓▓ ▓▓▌ ▐▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▌ ▐▓▓▐▓▓ ^█▓▓▓ ▀▓▓▄ ▐▓▓▌ ▓▓▓▓▄▓▓▓▓ ▐▓▓ ▓▓▓ ▓▓▓ ▓▓▓▄ ▓▓▓▓` '▀▓▓▓▄ ^▓▓▓ ▓▓▓ └▀▀▀▀ ▀▀ ^▀▀ `▀▀ `▀▀ '▀▀ ▐▓▓▌ ▀▀▀▀▓▄▄▄ ▓▓▓▓▓▓, ▓▓▓▓▀ `▀█▓▓▓▓▓▓▓▓▓▌ ¬`▀▀▀█▓ INFO:unityagents:{'--curriculum': 'None', '--docker-target-name': 'Empty', '--help': False, '--keep-checkpoints': '5', '--lesson': '0', '--load': False, '--no-graphics': False, '--run-id': 'ppo', '--save-freq': '50000', '--seed': '-1', '--slow': False, '--train': True, '--worker-id': '0', '<env>': 'CartPole'} INFO:unityagents: 'CartPoleAcademy' started successfully! Unity Academy name: CartPoleAcademy Number of Brains: 1 Number of External Brains : 1 Lesson number : 0 Reset Parameters : Unity brain name: CartPoleBrain Number of Visual Observations (per agent): 0 Vector Observation space type: continuous Vector Observation space size (per agent): 3 Number of stacked Vector Observation: 1 Vector Action space type: discrete Vector Action space size (per agent): 2 Vector Action descriptions: , C:\Users\aguro\Downloads\ml-agents-0.4.0\ml-agents-0.4.0\python\unitytrainers\trainer_controller.py:194: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. trainer_config = yaml.load(data_file) Traceback (most recent call last): File "learn.py", line 84, in <module> tc.start_learning() File "C:\Users\aguro\Downloads\ml-agents-0.4.0\ml-agents-0.4.0\python\unitytrainers\trainer_controller.py", line 216, in start_learning trainer_config = self._load_config() File "C:\Users\aguro\Downloads\ml-agents-0.4.0\ml-agents-0.4.0\python\unitytrainers\trainer_controller.py", line 194, in _load_config trainer_config = yaml.load(data_file) File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\__init__.py", line 114, in load return loader.get_single_data() File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\constructor.py", line 41, in get_single_data node = self.get_single_node() File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\composer.py", line 36, in get_single_node document = self.compose_document() File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\composer.py", line 55, in compose_document node = self.compose_node(None, None) File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\composer.py", line 84, in compose_node node = self.compose_mapping_node(anchor) File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\composer.py", line 133, in compose_mapping_node item_value = self.compose_node(node, item_key) File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\composer.py", line 84, in compose_node node = self.compose_mapping_node(anchor) File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\composer.py", line 127, in compose_mapping_node while not self.check_event(MappingEndEvent): File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\parser.py", line 98, in check_event self.current_event = self.state() File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\parser.py", line 428, in parse_block_mapping_key if self.check_token(KeyToken): File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\scanner.py", line 116, in check_token self.fetch_more_tokens() File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\scanner.py", line 223, in fetch_more_tokens return self.fetch_value() File "C:\Users\aguro\Anaconda3\envs\ml-agents\lib\site-packages\yaml\scanner.py", line 579, in fetch_value self.get_mark()) yaml.scanner.ScannerError: mapping values are not allowed here in "C:\Users\aguro\Downloads\ml-agents-0.4.0\ml-agents-0.4.0\python\trainer_config.yaml", line 11, column 36

該当のファイル

こちらに私がチュートリアルで制作したUnityのデータを載せておきます。
チュートリアルで製作したUnityのデータ全部です。
80MBもあるので、誰もダウンロードはしないと思いますが…。

試したこと

一度チュートリアル通りに行い、このエラーが出ました。
また初めからチュートリアル通りに行い、同じエラーが出てしまいました。
チュートリアルの中で唯一気になった点は、「unity-environmentをUnityで開きます。」です。
この意味は、「unity-environment」のフォルダをProjectのAssets内にドラッグアンドドロップする事であっているのでしょうか?
他の部分に関しては確認しながら進めたので間違えている可能性は低いです。

補足情報(FW/ツールのバージョンなど)

ML-Agents Beta 0.4.0
Unity 2018 3.0f2
参考になるかは分かりませんが、オブジェクトの設定です。
イメージ説明
イメージ説明
イメージ説明
イメージ説明
以下の画像は、実行するときにエラーが表示され、実行できない状態です。
(CartPoleBrainのBrain(Script)のBrainTypeをPlayerにした場合は実行でき、Externalにすると実行できないです。)
イメージ説明
チュートリアルを経験しないと回答できないような質問で申し訳ないのですがよろしくお願いします。
エラーで詰まってもう6時間くらい経ってしまってつらいです。。。

Bongo👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

trainer_config.yamlのパースに失敗しているように見えますね...
サイトのガイドだとmax_stepsを20万回に変更していますが、ここはいじったでしょうか。もしそうでしたら、たとえばその際にコロンの後にスペースを入れ忘れた...といった心当たりはありますでしょうか?
「trainer_config.yaml」の内容をご提示いただけると手がかりになるかもしれません。

「unity-environmentをUnityで開きます。」については、プロジェクト内にドロップするのではなく、Unity起動時のプロジェクト選択ダイアログで右上の「Open」(または「開く」)ボタンでunity-environmentフォルダを指定して開くことを指すと思われます。今回の不具合と関係あるのかは不確かですが、気になるようでしたらそちらの方法でやり直してみてもいいかと思います。

もしかすると、Python周りのバージョンが影響しているかもしれません。ご質問者さんが使用したPythonや各種パッケージのバージョンはいくつでしょうか?
0.4.0のインストールガイドでは「Python 3が必要、Python 2は非対応、このガイドでは3.6を使う」としか書かれていないようですが、現行のガイドでは「3.6を使うこと、3.5や3.7は非対応」といった文言が追加されているようです。

私もちょっと試してみました。ご参考になりましたら幸いです。
ご質問者さんはMac版Unityでプロジェクトを製作しWindows向けにビルド、Windows上のPython環境で学習...というパターンでしょうか?
私の実験ではプロジェクト作成・学習ともにMac版でやりましたが、おそらくPython関連のバージョンが適切ならいけるんじゃないかな...と思います。

プロジェクト作成

  • macOS Mojave 10.14.4、Unity 2019.1.0f2を使用
  • unity-environmentをUnityで開く...プロジェクトが作成された環境とUnityのバージョンが異なるためアップグレードするよう指示があり、それに従いアップグレード
  • 【Unity強化学習】自作ゲームで強化学習 - Qiitaに従ってシーンを作成、スクリーンショットを見るとAssets直下にCartPoleフォルダを作ってスクリプトやシーンを保存しているようなので、一応それにならった
  • 動作には関係ないが、見栄えを良くしようと思いポールを黄色、カートを黒で塗った
  • ML-Agents/Examples/Template/Scriptsに入っているTemplateAcademyとTemplateAgentのオリジナルはそのままとっておき、CartPoleフォルダにコピーを作ってCartPoleAcademy、CartPoleAgentに名前を変え、CartPoleAgentの内容をサイトに従い作成した
  • 引き続きスクリプトのアタッチ、インスペクタでのパラメーター編集を行った
  • BrainがPlayerモードの状態でプレイボタンを押すとポールがパタパタ動き、左右アローキーでカートが動くのを確認し、モードをExternalに変える
  • ビルドしたファイルでml-agents-0.4.0/pythonフォルダがごちゃごちゃしないよう(といってもMac版では単一のアプリケーションパッケージになるので気にするほどでもありませんが)pythonフォルダ直下にCartPoleフォルダを作ってそこへビルド、CartPole.appが作成されたことを確認

学習

tensorflow==1.7.1 Pillow>=4.2.1 matplotlib numpy>=1.11.0 jupyter pytest>=3.2.2 docopt pyyaml protobuf==3.5.2 grpcio==1.11.0
unityagents==0.3.0 - docopt [required: Any, installed: 0.6.2] - grpcio [required: ==1.11.0, installed: 1.11.0] - jupyter [required: Any, installed: 1.0.0] - matplotlib [required: Any, installed: 3.0.3] - numpy [required: >=1.11.0,<=1.14.1, installed: 1.14.1] - Pillow [required: >=4.2.1, installed: 6.0.0] - protobuf [required: ==3.5.2, installed: 3.5.2] - pytest [required: >=3.2.2, installed: 4.4.1] - pyyaml [required: Any, installed: 5.1] - tensorflow [required: ==1.7.1, installed: 1.7.1]
  • ガイドではtrainer_config.yamlのmax_stepsを20万回に上げているが、とりあえずこれは5万回のままいじらないことにした
  • python learn.py CartPole/CartPole --trainを実行、小さなウインドウの中でカートがちょこちょこ動き出し、25000ステップくらいでスコア約5点に落ち着いた
(学習スタート前の出力は長すぎるので省略) INFO:unityagents: CartPoleBrain: Step: 1000. Mean Reward: -0.627. Std of Reward: 0.158. INFO:unityagents: CartPoleBrain: Step: 2000. Mean Reward: -0.683. Std of Reward: 0.134. INFO:unityagents: CartPoleBrain: Step: 3000. Mean Reward: -0.738. Std of Reward: 0.108. INFO:unityagents: CartPoleBrain: Step: 4000. Mean Reward: -0.751. Std of Reward: 0.098. INFO:unityagents: CartPoleBrain: Step: 5000. Mean Reward: -0.697. Std of Reward: 0.136. INFO:unityagents: CartPoleBrain: Step: 6000. Mean Reward: -0.619. Std of Reward: 0.161. INFO:unityagents: CartPoleBrain: Step: 7000. Mean Reward: -0.390. Std of Reward: 0.263. INFO:unityagents: CartPoleBrain: Step: 8000. Mean Reward: -0.081. Std of Reward: 0.344. INFO:unityagents: CartPoleBrain: Step: 9000. Mean Reward: 0.434. Std of Reward: 0.473. INFO:unityagents: CartPoleBrain: Step: 10000. Mean Reward: 1.002. Std of Reward: 0.589. INFO:unityagents: CartPoleBrain: Step: 11000. Mean Reward: 1.922. Std of Reward: 1.099. INFO:unityagents: CartPoleBrain: Step: 12000. Mean Reward: 3.137. Std of Reward: 1.511. INFO:unityagents: CartPoleBrain: Step: 13000. Mean Reward: 3.216. Std of Reward: 1.361. INFO:unityagents: CartPoleBrain: Step: 14000. Mean Reward: 3.315. Std of Reward: 1.555. INFO:unityagents: CartPoleBrain: Step: 15000. Mean Reward: 1.851. Std of Reward: 1.364. INFO:unityagents: CartPoleBrain: Step: 16000. Mean Reward: 1.442. Std of Reward: 0.882. INFO:unityagents: CartPoleBrain: Step: 17000. Mean Reward: 2.556. Std of Reward: 1.644. INFO:unityagents: CartPoleBrain: Step: 18000. Mean Reward: 4.718. Std of Reward: 0.879. INFO:unityagents: CartPoleBrain: Step: 19000. Mean Reward: 4.622. Std of Reward: 0.878. INFO:unityagents: CartPoleBrain: Step: 20000. Mean Reward: 3.693. Std of Reward: 1.521. INFO:unityagents: CartPoleBrain: Step: 21000. Mean Reward: 3.438. Std of Reward: 1.436. INFO:unityagents: CartPoleBrain: Step: 22000. Mean Reward: 2.988. Std of Reward: 1.652. INFO:unityagents: CartPoleBrain: Step: 23000. Mean Reward: 3.992. Std of Reward: 1.458. INFO:unityagents: CartPoleBrain: Step: 24000. Mean Reward: 4.288. Std of Reward: 1.202. INFO:unityagents: CartPoleBrain: Step: 25000. Mean Reward: 4.916. Std of Reward: 0.325. INFO:unityagents: CartPoleBrain: Step: 26000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 27000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 28000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 29000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 30000. Mean Reward: 4.965. Std of Reward: 0.197. INFO:unityagents: CartPoleBrain: Step: 31000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 32000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 33000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 34000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 35000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 36000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 37000. Mean Reward: 4.847. Std of Reward: 0.688. INFO:unityagents: CartPoleBrain: Step: 38000. Mean Reward: 4.883. Std of Reward: 0.370. INFO:unityagents: CartPoleBrain: Step: 39000. Mean Reward: 4.927. Std of Reward: 0.285. INFO:unityagents: CartPoleBrain: Step: 40000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 41000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 42000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 43000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 44000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 45000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 46000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 47000. Mean Reward: 4.915. Std of Reward: 0.337. INFO:unityagents: CartPoleBrain: Step: 48000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents: CartPoleBrain: Step: 49000. Mean Reward: 4.963. Std of Reward: 0.205. INFO:unityagents:Saved Model INFO:unityagents: CartPoleBrain: Step: 50000. Mean Reward: 5.000. Std of Reward: 0.000. INFO:unityagents:Saved Model INFO:unityagents:List of nodes to export : INFO:unityagents: action INFO:unityagents: value_estimate INFO:unityagents: action_probs INFO:tensorflow:Restoring parameters from ./models/ppo/model-50001.cptk INFO:tensorflow:Froze 7 variables. Converted 7 variables to const ops.

学習結果のインポート

  • Unity TensorFlow Pluginを入手しプロジェクトにインポート
  • 「Project Settings...」の「Scripting Runtime Version」はすでに「.NET 4.x Equivalent」になっていたので設定省略、「Scripting Define Symbols」にENABLE_TENSORFLOWを追加(まぬけなことに、フィールドに最初ENABLE_TENSORFLOWを入力したあと確定せずにProject Settingsを閉じたらシンボルが追加されていませんでした...念のためご確認ください)
  • ml-agents-0.4.0/python/models/ppo/CartPole_ppo.bytesをプロジェクト内にドロップ、CartPoleBrainをInternalに切り替えてCartPole_ppo.bytesをセット

実行結果
なんとかそれらしくバランスをとってくれました。
結果

投稿2019/05/02 06:13

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aguroshou

2019/05/03 17:19 編集

Bongoさん回答ありがとうございます! 指摘して下さった通り、trainer_config.yamlに問題がありました。 実は max_steps: 5.0e4 memory_size: 256 とすべきところを max_steps: 5.0e4 memory_size: 256 と改行コードを消してしまい、質問した通りのエラーが表示されました。 (このコメント欄ではスペースが削除されるみたいで、正確な表示ではありません。) 私が気づかなかった理由として、Windows10のメモ帳でtrainer_config.yamlを開いていたのですが、調べてみるとこのメモ帳に欠陥がありました。 Windows10のメモ帳にはCRLFの改行コードのみ対応しており、CR、LFの改行コードには対応していなく、そのせいで全て改行されていない状態でtrainer_config.yamlが表示されていました。 ここで私がmax_steps: 5.0e4を書き換える際に、メモ帳では見えない改行コードであるCRまたはLFを誤って削除してしまい、エラーが出てしまったのでした。 ちなみにCR、LFに対応していないテキストエディタはWindowsのメモ帳くらいしかないそうです。 もし私と同じミスをしている方のために、このメモを残しておきました。 ちなみにプロジェクト作成・学習ともにWindows10版で実行しました。 また、制作したデータをアップロードしたつもりだったのですが、正しくセーブされていなかったようでした…。 それとチュートリアルに書かれていないことで私が参考になったことなのですが https://www.fast-system.jp/unity-ml-agents-version-0-8-0-howto/ が参考になりました。 python learn.py CartPole --train を実行する前にコマンドラインの先頭文字が「ml-agents」に切り替わった状態にしないといけないみたいです。(適当なことを言ってたらごめんなさい。) 現在このQiitaチュートリアルに取り組んでいる方へのアドバイスなのですが、1年前の少し古い記事なので、最新のチュートリアルを探して取り組んだほうが色々と便利で使いやすいデータで強化学習が学べるみたいです。 最後に、Bongoさん、丁寧な回答で的を得た解決方法を提示してくださり本当にありがとうございました。この回答がなければ一生メモ帳の改行コードに苦しむことになってました笑
Bongo

2019/05/03 20:26

なるほど、そんな原因がありましたか。いい感じに動いているようで安心しました。 ご提示いただいた0.8.0、0.8.1版の記事も役に立ちそうです。ありがとうございます。 環境を「(ml-agents)」に切り替えるのは、特に現行バージョンのAnacondaを使っている場合に重要そうですね。実はMac上で試す前にWindows上でもやろうとしたのですが(結局Unity・Python間の通信を確立できず断念しました...どこか見落としがあったか、あるいはなにかセキュリティソフトが悪さをしていたのでしょうか)、サイトでの解説にある5.1.0ではなく現行バージョンを使うと「(base)」のPythonバージョンが3.7になるようでした。うっかり切り替え忘れるとバージョン違いによる不具合が出るかもしれませんね。
guest

0

解決方法ではありませんが、正しく動作したGifを載せておきます。
イメージ説明

投稿2019/05/03 17:08

aguroshou

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問