Я настраиваю как собственные потери, так и собственные методы подгонки внутри Keras для алгоритма REINFORCE RL, следуя сути bstriner (https://gist.github.com/bstriner/e1e011652b297d13b3ac3f99fd11b2bc#gistcomment-2310228),, но я получаю указанную ошибку.
Есть какие-нибудь подсказки?
Я пытаюсь настроить код Pyramch REINFORCE RL Максима Лапана на Keras, однако требования к Keras для y_pred и y_true не позволяют мне достичь этого идеального порта PyTorch / Keras ...
Class NN():
...
def custom_loss(self, y_pred, y_true):
log_prob = self.log_softmax(y_pred)
log_prob_qvals = self.batch_qvals * log_prob[range(len(self.batch_states)), y_true]
loss = K.mean(log_prob_qvals * -1, axis=0)
return loss
def custom_fit(self, x, ytrue):
print('FFP-BP = 1 gradient update')
updates = self.optim.get_updates(
loss=self.custom_loss, params=K.variable(self.net.trainable_weights))
return K.function(input=[x, ytrue], outputs=[self.custom_loss], updates=updates)
...
Мои ожидаемые результаты должны соответствовать (почти) тем же результатам, когда я нажимаю F5 с кодом Pytorch:
logits_v = net(states_v)
log_prob_v = F.log_softmax(logits_v, dim=1)
log_prob_actions_v = batch_qvals_v * \
log_prob_v[range(len(batch_states)), batch_actions_t]
loss_v = -log_prob_actions_v.mean()
loss_v.backward()
optimizer.step()
EDIT 1: После проверки, при отладке Python, я вижу, что значениепотеря вычисляется правильно, поэтому я подозреваю, что это что-то с параметрами ...