Как вычислить grads_and_vars с помощью GradientDescentOptimizer
У меня есть следующая реализация кода CNN.
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate).minimize(loss = cnn.loss, global_step=global_step)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
Используя его, я получаю следующую ошибку:
grads_and_vars = optimizer.compute_gradients(cnn.loss)
AttributeError: 'Operation' object has no attribute 'compute_gradients'
Я заметил, что использование вышеуказанной реализации GradientDescentOptimizer с tf.train.exponential_decay не предоставляет атрибут 'compute_gradients'
для оптимизатора.
Может кто-нибудь мне помочь?
Оба compute_gradients
и apply_gradients
являются методами класса tf.train.GradientDescentOptimizer
.
Проблема заключается в том, что вы определяете свой оптимизатор как шаг. Вы должны удалить вызов minimize
, например:
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
grads_and_vars = optimizer.compute_gradients(cnn.loss)
train_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
и он должен работать.
Однако, если вы не используете какое-либо конкретное использование градиентов, вы действительно можете использовать .minimize(...)
для прямого определения шага обучения, аналогично вашему train_op
:
optimizer = tf.train.GradientDescentOptimizer(cnn.learning_rate)
train_op = optimizer.minimize(loss=cnn.loss, global_step=global_step)
Дальнейшее объяснение того, как apply_gradients
работает здесь.
Не забудьте посмотреть исходный код optimizer.py в tensorflow (путь: /tensorflow/tensorflow/python/training/optimizer.py), и вы получите ответ.
Фрагмент кода, то есть от строки 365 до строки 423, представляет собой реализацию функции .minimize()
. Не волнуйтесь, большинство из них - заметки. Фактически, он выполняет .compute_gradients()
и .apply_gradients()
вместе. Поэтому, если вы хотите вызвать только .compute_gradients()
, вы должны убедиться, что переменная является экземпляром tf.train.GradientDescentOptimizer()
.
Еще в рубрике
- Вопросы
- Gradient-descent
- Как вычислить grads_and_vars с помощью GradientDescentOptimizer