Я обучаю агента DQN, голова которого состоит из двух слоев F C, последний из которых является выходом сети.
Раньше я выполнял одну заключительную операцию после последнего F C layer, и используйте для вызова этого «Output». Это сработало, когда я перезагружал модель для вывода, поскольку операция «Вывод» соответствовала фактической последней операции в сети:
fcl_2 = tf.layers.dense(
inputs=fcl_1,
units=self.action_shape,
activation=None,
kernel_initializer=tf.contrib.layers.xavier_initializer(),
)
output = tf.where(
self.valid_actions < 1,
tf.ones_like(fcl_2) * self.illegal_q,
fcl_2,
name="Output",
)
return output
Теперь я удалила последнюю операцию, tf.where, так что выход сети - последний слой F C. Хотя, если я называю это «Выход», при загрузке модели у меня есть несколько операций, называемых «Выход», а не только одна, которая является фактическим конечным результатом этого слоя. Например, у меня есть такие операции, как Output / kernel_initializer, Output / Add_bias и т. Д.
Есть ли способ получить тот же результат, что и в первой части, где «Output» - это имя финальной операции сети, содержащей результат? Это новый заголовок:
fcl_2 = tf.layers.dense(
inputs=fcl_1,
units=self.action_shape,
activation=None,
kernel_initializer=tf.contrib.layers.xavier_initializer(),
name="Output",
)
return output
Я пробовал что-то вроде output = tf.identity (output, name = "Ouput"), и это работает, но Я искал решение, в котором нет необходимости использовать накладные расходы.