我想记录reference implementation for reinforcement learning provided by openAI的变量和激活。 记录重量和偏差是直截了当的,但我记录激活时遇到了麻烦。 我分叉baselines和added a commit来记录权重和偏差。 second commit为激活添加摘要操作(此处仅激活输入)。但是,第二次提交会导致错误:
InvalidArgumentError (see above for traceback): Shape [-1,84,84,4] has negative dimensions
[[Node: deepq/observation = Placeholder[dtype=DT_FLOAT, shape=[?,84,84,4], _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
感谢任何帮助。
答案 0 :(得分:0)
你没有办法重现错误。我尝试了python3 -m baselines.deepq.experiments.train_pong
并在您的代码上遇到了同样的问题。接下来是我在你的分叉代码上运行这个命令。
您对tf.summary.histogram
的使用似乎没问题。问题似乎是在通过此堆栈跟踪构建的另一个操作中:
File "/usr/local/google/home/iga/tinker/baselines/baselines/deepq/experiments/train_pong.py", line 27, in main
prioritized_replay=True
File "/usr/local/google/home/iga/tinker/baselines/baselines/deepq/simple.py", line 178, in learn
grad_norm_clipping=10
File "/usr/local/google/home/iga/tinker/baselines/baselines/deepq/build_graph.py", line 178, in build_train
act_f = build_act(make_obs_ph, q_func, num_actions, scope=scope, reuse=reuse)
File "/usr/local/google/home/iga/tinker/baselines/baselines/deepq/build_graph.py", line 105, in build_act
observations_ph = U.ensure_tf_input(make_obs_ph("observation"))
File "/usr/local/google/home/iga/tinker/baselines/baselines/deepq/simple.py", line 170, in make_obs_ph
return U.BatchInput(env.observation_space.shape, name=name)
File "/usr/local/google/home/iga/tinker/baselines/baselines/common/tf_util.py", line 150, in __init__
super().__init__(tf.placeholder(dtype, [None] + list(shape), name=name))
有一个占位符,deepq代码使用名称deepq/observation
创建。
评估此占位符会导致错误,因为在运行期间没有为其提供任何Feed。问题是“为什么添加摘要操作会触发此错误”。答案似乎是因为我们想要评估和编写所有摘要(baselines / baselines / deepq / simple.py),包括新添加的摘要。评估新摘要需要评估导致错误的占位符。
我向Session.run()
方法添加了一些打印语句,以验证deepq/observation
的值确实未在Feed中传递。它被传递了很多次运行,但是在我的机器上运行约30秒后,调用Session.run()并使用不包含此占位符值的feed_dict。它存在时的运行包含deepq / observation,deepq / update_ep和deepq / stochastic的feed。值不存在时的运行包含deepq_1 / action,deepq_1 / obs_tp1,deepq_1 / weight,deepq_1 / done等的提要。
我不熟悉基线来建议收集所需摘要的正确方法,但希望此信息有所帮助。