我正在编写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中完成的方法或一些可以帮助我解决问题的技巧。
感谢您的帮助,如果您需要更多信息,请随时询问。