EnsekiTT Blog

EnsekiTTが書くブログです。

2018年1月19日−21日向けml-agentsのPPO.ipynbが動かない時の対処の話 ※追記

スポンサーリンク

こんにちは、えんせきです。
ちょっと寒いところにずっといたら体調を崩してしまいました。よわい。
熱は下がらないけど眠気が全く来ないのでWindowsの環境を整えていました。

つまりなにしたの?

この週末で別の環境(Windows)にml-agentsを入れようと思ったらエラーが出たのでとりあえず対処した。
f:id:ensekitt:20180120001019j:plain

追記: 2018年1月25日
すごい人がなおしたっぽい。
github.com


なにしようとしてたの?

家の据え置きマシンの上でPPO動かしていろいろ学習していこうと思って今日の夕方にGithubからMasterをクローンして動かしたら
ValueError: List argument 'values' to 'ConcatV2' Op with length 0 shorter than minimum length 2.
ってエラーが出て困った。

どうすればなおるの?

2018年1月19日にコミットされた
github.com
の中でbrainにオブザベーション数のパラメータが入ったことが想定されたようなコードになっている。
マルチオブザベーションに対応するコードがマージされたらしいんだけど、デフォルトのPPO.ipynbと環境の組み合わせだとBrain側のパラメータが足りていない感じになっていて、さっきのエラーにつながる。

そこで、とりあえず一つ前のコミットに戻す。
ログを確認。

$ git log

# これが今の最新
commit a1d35bfa3735ca9d5feb280f475ac5c6b389d72b
Author: Alfredo Solano
Date:   Fri Jan 19 10:01:41 2018 +0900

    Initial support for multiple observations (#256)

    * Initial support for multiple observations

    * Fix PPO for continuous control  #←まんま書いてあってFixはまだされていないっぽい。

# 動いてた頃のコミット
commit 921bb15849b4a6b3880947ceaae49fea04c0533e
Author: 60days
Date:   Tue Jan 16 11:23:11 2018 +1100

    Tiny TensorFlowSharp docs tweak (#252)

    Namespace capitalization change for people copy/pasting - otherwise namespace is not found

動いてた頃のコミットでブランチ切る。

$ git checkout -b my_stable 921bb15849b4a6b3880947ceaae49fea04c0533e
$ git branch
  master
* my_stable

そしたら動くようになった。(あたりまえ)
続報対応できるかわからないけど、とりあえず週末はいる前に解決できてよかった。

PPO.ipynbで発生していたエラー全文

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-6-fea09393b070> in <module>()
     20                                h_size=hidden_units, epsilon=epsilon,
     21                                beta=beta, max_step=max_steps,
---> 22                                normalize=normalize, num_layers=num_layers)
     23 
     24 is_continuous = (env.brains[brain_name].action_space_type == "continuous")

C:\dev\ml-agents\python\ppo\models.py in create_agent_model(env, lr, h_size, epsilon, beta, max_step, normalize, num_layers)
     23     brain = env.brains[brain_name]
     24     if brain.action_space_type == "continuous":
---> 25         return ContinuousControlModel(lr, brain, h_size, epsilon, max_step, normalize, num_layers)
     26     if brain.action_space_type == "discrete":
     27         return DiscreteControlModel(lr, brain, h_size, epsilon, beta, max_step, normalize, num_layers)

C:\dev\ml-agents\python\ppo\models.py in __init__(self, lr, brain, h_size, epsilon, max_step, normalize, num_layers)
    220             bw = brain.camera_resolutions[i]['blackAndWhite']
    221             encoders.append(self.create_visual_encoder(height_size, width_size, bw, h_size, 2, tf.nn.tanh, num_layers))
--> 222         hidden_visual = tf.concat(encoders, axis=2)
    223         if brain.state_space_size > 0:
    224             s_size = brain.state_space_size

c:\anaconda3\envs\mla\lib\site-packages\tensorflow\python\ops\array_ops.py in concat(values, axis, name)
   1097               tensor_shape.scalar())
   1098       return identity(values[0], name=scope)
-> 1099   return gen_array_ops._concat_v2(values=values, axis=axis, name=name)
   1100 
   1101 

c:\anaconda3\envs\mla\lib\site-packages\tensorflow\python\ops\gen_array_ops.py in _concat_v2(values, axis, name)
    703   if _ctx.in_graph_mode():
    704     _, _, _op = _op_def_lib._apply_op_helper(
--> 705         "ConcatV2", values=values, axis=axis, name=name)
    706     _result = _op.outputs[:]
    707     _inputs_flat = _op.inputs

c:\anaconda3\envs\mla\lib\site-packages\tensorflow\python\framework\op_def_library.py in _apply_op_helper(self, op_type_name, name, **keywords)
    568                   "List argument '%s' to '%s' Op with length %d shorter "
    569                   "than minimum length %d." %
--> 570                   (input_name, op_type_name, len(values), num_attr.minimum))
    571           # All tensors must have the same base type.
    572           if any([bt != base_types[0] for bt in base_types]):

ValueError: List argument 'values' to 'ConcatV2' Op with length 0 shorter than minimum length 2.
クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。