Я бы хотел вычислить градиент потерь по всем параметрам сети. Проблема возникает, когда я пытаюсь изменить каждую весовую матрицу, чтобы она была одномерной (это полезно для вычислений, которые я делаю позже с градиентами).
В этот момент Tensorflow выводит список None
(что означает, что не существует пути от потерь к этим тензорам, в то время как должны быть изменены параметры модели).
Вот код:
all_tensors = list()
for dir in ["fw", "bw"]:
for mtype in ["kernel"]:
t = tf.get_default_graph().get_tensor_by_name("encoder/bidirectional_rnn/%s/lstm_cell/%s:0" % (dir, mtype))
all_tensors.append(t)
# classifier tensors:
for mtype in ["kernel", "bias"]:
t = tf.get_default_graph().get_tensor_by_name("encoder/dense/%s:0" % (mtype))
all_tensors.append(t)
all_tensors = [tf.reshape(x, [-1]) for x in all_tensors]
tf.gradients(self.loss, all_tensors)
all_tensor
в конце цикла for находится список из 4 компонентов с матрицами различной формы. Этот код выводит [None, None, None, None]
.
Если я уберу измененную линию all_tensors = [tf.reshape(x, [-1]) for x in all_tensors]
код работает нормально и возвращает 4 тензора, содержащего градиенты по каждому параметру.
Почему это происходит? Я почти уверен, что изменение формы не нарушает никакой зависимости в графике, в противном случае его вообще нельзя использовать ни в одной сети.