В ленте вам нужно только вычислить передний проход, оптимизатор и определение минимизации не являются частью прямого прохода, поэтому вы должны их удалить.
Более того, если вы хотите использовать метод оптимизатора minimize
, вам не нужно использовать объект tf.GradienTape
, а просто определить прямой проход (вычисление потерь) как функцию, тогда оптимизатор создать ленту + минимизировать функцию для вас.
Однако, поскольку вы хотите использовать константу, а не переменную, вы должны использовать tf.GradientTape
и вручную вычислить значение убытка.
import tensorflow as tf
x = tf.constant(3.0)
with tf.GradientTape() as t:
t.watch(x)
y = (x - 10) ** 2
grads = t.gradient(y, [x])
Конечно, вы не можете применять градиенты
opt = tf.optimizers.Adam()
opt.apply_gradients(zip([y], [x]))
, поскольку x
не обучаемая переменная, а константа (вызов apply_gradients
вызовет исключение)