急切执行tf.GradientTape仅返回None

时间:2019-04-09 23:23:23

标签: python-3.x tensorflow keras gradient reinforcement-learning

我正在尝试使用tf.GradientTape计算梯度。当我尝试使用loss和Model.trainable_weights(tf.keras.Model)作为输入来执行此操作时,结果将返回None数组。我究竟做错了什么?我使用的tensorflow版本是1.13.0。

implemneted算法是OnPolicy DQN(不是通常的DQN),因此我不使用目标网络(在常规DQN代码中用作行为网络)。因此,我想区分错误,在下面的代码中,该错误定义为Y(即R + gamma * max_a Q(s',a'))和Q(s,a)的最小批量MSE。

rowSums(df)
#[1] 100 100

1 个答案:

答案 0 :(得分:1)

尝试将更新功能更改为:

def update(self, state, action, target):
        # target: R + gamma * Q(s',a')
        # calculate Q(s,a)
        q_values = self.model(tf.convert_to_tensor(state[None, :], dtype=tf.float32))
        actions_one_hot = tf.one_hot(action, self.num_action, 1.0, 0.0)
        action_probs = tf.reduce_sum(actions_one_hot * q_values, reduction_indices=-1)

        # Minibatch MSE => (1/batch_size) * (R + gamma * Q(s',a') - Q(s,a))^2
        loss = tf.reduce_mean(tf.squared_difference(target, action_probs))
        return loss

我认为通过预测函数中的.numpy()调用,磁带将失去对权重的引用。 (我尚未测试答案)