Я пытаюсь научиться обучать алгоритм двойного DQN на тензорном потоке, и он не работает. Чтобы убедиться, что все в порядке, я хотел что-то протестировать. Я хотел убедиться, что использование tf.gather для argmax точно такое же, как и максимальное значение: допустим, у меня есть сеть с именем target_network:
сначала возьмем max:
next_qvalues_target1 = target_network.get_symbolic_qvalues(next_obs_ph) #returns tensor of qvalues
next_state_values_target1 = tf.reduce_max(next_qvalues_target1, axis=1)
давайте попробуем по-другому - используя argmax и соберите:
next_qvalues_target2 = target_network.get_symbolic_qvalues(next_obs_ph) #returns same tensor of qvalues
chosen_action = tf.argmax(next_qvalues_target2, axis=1)
next_state_values_target2 = tf.gather(next_qvalues_target2, chosen_action)
diff = tf.reduce_sum(next_state_values_target1) - tf.reduce_sum(next_state_values_target2)
next_state_values_target2 и next_state_values_target1 должны быть полностью идентичными. поэтому запуск сеанса должен выводить diff =. но это не так.
Что мне не хватает?
Спасибо.