#tensorflow #tensorflow2.0
#тензорный поток #tensorflow2.0
Вопрос:
Для моего приложения для обучения с подкреплением мне нужно иметь возможность применять пользовательские градиенты / минимизировать функцию изменения потерь. Согласно документации, это должно быть возможно с помощью функции Optimizer.minimize(). Однако в моей версии, установленной на pip, похоже, вообще нет этой функции.
Мой код:
from tensorflow.python.keras.optimizers import Adam, SGD
print(tf.version.VERSION)
optim = Adam()
optim.minimize(loss, var_list=network.weights)
вывод:
2.0.0-alpha0
Traceback (most recent call last):
File "/Users/ikkamens/Library/Preferences/PyCharmCE2018.3/scratches/testo.py", line 18, in <module>
optim.minimize(loss, var_list=network.weights)
AttributeError: 'Adam' object has no attribute 'minimize'
Комментарии:
1. это должно быть
tf.optimizers.Adam()
2. согласно документации, tf.optimizers имеет псевдоним tf.keras.optimizers: tensorflow.org/versions/r2.0/api_docs/python/tf/optimizers /…
Ответ №1:
На самом деле разница есть. Если вы напечатаете оба класса, вы увидите:
from tensorflow.python.keras.optimizers import Adam
print(Adam)
print(tf.optimizers.Adam)
<class 'tensorflow.python.keras.optimizers.Adam'>
<class 'tensorflow.python.keras.optimizer_v2.adam.Adam'>
Итак, в первом случае Adam наследует от какого-либо другого класса. Он предназначен для использования внутри цикла обучения Keras, поэтому у него нет метода минимизации. Чтобы убедиться, давайте получим все методы класса
import inspect
from tensorflow.python.keras.optimizers import Adam
print(inspect.getmembers(Adam(), predicate=inspect.ismethod))
Вывод показывает, что этот класс даже не имеет minimize