【发布时间】:2020-04-11 20:47:12
【问题描述】:
我一直在为任何 Vanilla Policy Gradient 在 openAI 代码中实现神经网络(事实上,这部分几乎在所有地方都使用)。代码看起来像这样:
def mlp_categorical_policy(x, a, hidden_sizes, activation, output_activation, action_space):
act_dim = action_space.n
logits = mlp(x, list(hidden_sizes) + [act_dim], activation, None)
logp_all = tf.nn.log_softmax(logits)
pi = tf.squeeze(tf.random.categorical(logits, 1), axis=1)
logp = tf.reduce_sum(tf.one_hot(a, depth=act_dim) * logp_all, axis=1)
logp_pi = tf.reduce_sum(tf.one_hot(pi, depth=act_dim) * logp_all, axis=1)
return pi, logp, logp_pi
这个多层感知器网络定义如下:
def mlp(x, hidden_sizes=(32,), activation=tf.tanh, output_activation=None):
for h in hidden_sizes[:-1]:
x = tf.layers.dense(inputs=x, units=h, activation=activation)
return tf.layers.dense(inputs=x, units=hidden_sizes[-1], activation=output_activation)
我的问题是这个 mlp 函数的返回值是什么?我的意思是结构或形状。它是一个 N 维张量吗?如果是这样,它是如何作为tf.random_categorical 的输入提供的?如果不是,它只是形状[hidden_layer2, output],那么其他层发生了什么?根据他们的website description about random_categorical,它只需要一个二维输入。 openAI 的VPG algorithm 的完整代码可以在这里找到。 mlp 实现here。如果有人能告诉我这个mlp_categorical_policy() 在做什么,我将不胜感激?
注意:隐藏大小为[64, 64],动作维度为3
感谢和欢呼
【问题讨论】:
标签: tensorflow neural-network reinforcement-learning openai-gym