Оптимизатор Adam по умолчанию не работает в tf.keras, но работает строка `adam` - PullRequest
3 голосов
/ 10 июля 2019

Я пробовал бета-версию TensroFlow v2 и пробовал модели tf.keras.

Когда я компилирую модель и выбираю оптимизатор в качестве строки 'adam'. Модель можно обучить правильно:

model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(x, y)

Но когда я пытаюсь использовать оптимизатор по умолчанию tf.keras.optimizers.Adam(), он не может быть обучен и выводит потери nan на каждой итерации.

adam = tf.keras.optimizers.Adam()
model.compile(optimizer=adam, loss='categorical_crossentropy')
model.fit(x, y)

Разве строка 'adam' не должна быть оптимизатором Адама по умолчанию, или я что-то упустил? Я пробовал несколько гиперпараметров (learning_rate, beta_1, beta_2 и т. Д.), Но, похоже, ни один из них не работает. Это большое дело, потому что я, возможно, не захочу постоянно использовать гиперпараметры по умолчанию.

Кто-нибудь может объяснить это поведение?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

После небольшого копания кажется, что когда вы набираете строку 'adam', она вызывает другого адама, который называется adam_v2 .

Это можно найти здесь .

from tenforflow.python.keras.optimizer_v2.adam import Adam

adam = Adam()

model.compile(optimizer=adam, loss='categorical_crossentropy')
model.fit(x, y)
1 голос
/ 10 июля 2019

Из того, что я могу собрать, теперь есть 2 разных реализации оптимизаторов. Использование optimizer = 'adam', кажется, использует эту реализацию:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/keras/optimizer_v2/adam.py

Вы можете явно импортировать как:

from tensorflow.python.keras.optimizer_v2 import adam as adam_v2
...