如何在Keras中手动编辑渐变?

时间:2018-07-14 16:02:10

标签: python tensorflow keras gradients

我正在编写DRLT(https://arxiv.org/abs/1701.08936)的Keras实现,这是经过深度强化学习培训的Visual Tracker,在尝试编辑渐变和执行反向传播时遇到了一些麻烦。

为简单起见:我有一张图像作为输入,我计算特征并做出预测。我需要做的是获取渐变并根据您在论文(https://arxiv.org/pdf/1701.08936.pdf)中找到的公式(7)对其进行编辑。我注意到Keras的优化器公开了get_gradients函数,但是我没有发现任何apply_gradients(在TensorFlow中存在)。 这是我的代码,如果您认为有帮助的话。

predictions_matrix = np.zeros(shape=(self.T, self.N, 4))
rewards_matrix = np.zeros(shape=(self.T,self.N))

# Images ready to be used for training
for i in range(int(len(training_imgs) / self.T)):  # T frames at a time
    features = []
    hidden_states = []
    mu = []
    for j in range(self.T):
        print("Processing frame {}".format(i * self.T + j))
        # Compute {o_1 . . . o_T}
        features.append(self.extract_features(training_imgs[i * self.T + j], gt=y[i * self.T + j]))

        # Compute {h_1 . . . h_T}
        hidden_states.append(self.rnn.predict(features[j]))
        # Get mus
        mu.append(self.get_mu_from_hidden_states(hidden_states[j]))
        # loop over N episodes
        for e in range(self.N):
            # Randomly sample predictions for N episodes according to equation (8)
            #print('Episode: {}'.format(e))
            # Store predictions with corresponding rewards
            predictions_matrix[j, e] = self.sample_location(mu_t=np.squeeze(mu[j]),sigma=1e-2)
            if epoch < 300:
                rewards_matrix[j,e] = self.compute_early_reward(l_t=predictions_matrix[j,e],g_t=y[i * self.T + j])
            else:
                rewards_matrix[j, e] = self.compute_late_reward(l_t=predictions_matrix[j, e],
                                                                 g_t=y[i * self.T + j])

如您所见,我只是不能使用train_on_batch方法。 因此,基本上,我正在寻找一种在Keras中使用apply gradients在TensorFlow中完成的方法或一些可以帮助我解决问题的技巧。

感谢您的帮助,如果您需要更多信息,请随时询问。

0 个答案:

没有答案