【发布时间】:2019-12-24 15:25:28
【问题描述】:
我正在尝试使用 tensorflow 2 实现 DDPG。 问题在于它不会学习:即使在添加了一些噪音和一些利用与探索因素之后,代理似乎每次都停留在一个通用方向上,只是改变了它的强度。
这是我的 Actor 神经网络:
d1 = self.dense(states, weights[0], weights[1])
d1 = tf.nn.relu(d1)
d2 = self.dense(d1, weights[2], weights[3])
d2 = tf.nn.relu(d2)
d3 = self.dense(d2, weights[4], weights[5])
d3 = tf.nn.tanh(d3)
return d3*self.action_bounds
这是它的训练功能:
def train(self, states, critic_gradients):
with tf.GradientTape() as t:
actor_pred = self.network(states)
actor_gradients = \
t.gradient(actor_pred, self.weights, -critic_gradients)
actor_gradients = list(map(lambda x: x/self.batch_size, actor_gradients))
self.opt.apply_gradients(zip(actor_gradients, self.weights))
critic_gradients 是由critic 类获取的。
评论网和演员的网差不多:
def _network(self, states, actions, weights, axis):
x = tf.concat([states, actions], axis=axis)
d1 = self.dense(x, weights[0], weights[1])
d1 = tf.nn.relu(d1)
d2 = self.dense(d1, weights[2], weights[3])
d2 = tf.nn.relu(d2)
d3 = self.dense(d2, weights[4], weights[5])
d3 = tf.nn.relu(d3)
return d3
使用权重:
self.shapes = [
[self.state_size+self.action_size, 64],
[64],
[64, 32],
[32],
[32, 1],
[1]
]
Critic 训练在均方误差函数损失上具有简单的最小化函数。
我不知道错误是在主要的(我在主要论文之后写的)还是在类中。 需要注意的一点是,我用一个简单的数据集测试了critic 的网络并且它收敛了。 我不知道如何尝试actor网络,我只是在使用带有Pendulum环境的Gym。
【问题讨论】:
标签: tensorflow neural-network reinforcement-learning