Связь между моделью Keras и бэкэнд-сессией - PullRequest
0 голосов
/ 26 сентября 2018

Известно, что tensorflow использует статический график для определения модели, и мы должны запустить сеанс для оценки.Хотя keras кажется более простым и может использоваться в качестве общей библиотеки.Но когда мы используем keras для построения модели и backend.set_session из keras вместе, возникают некоторые проблемы.Посмотрите на следующий пример

from keras import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
import keras.backend as K

def build_model(advantange='avg'):
    model = Sequential()
    model.add(Dense(3, input_shape=(3,)))
    # optimizer
    adam = Adam(lr=1E-3)
    # model compile
    model.compile(loss='mse', optimizer=adam)
    return model

nn1 = build_model()
nn2 = build_model()
nn1.set_weights(nn2.get_weights())

K.set_session(tf.Session())
print(K.get_value(nn1.optimizer.lr))

здесь мы строим две независимые модели (одинаковую архитектуру) nn1 и nn2 и пытаемся просто напечатать их внутреннюю скорость обучения, и мы получили следующую ошибку

tensorflow.python.framework.errors_impl.FailedPreconditionError: Attempting to use uninitialized value Adam/lr

Кажется, что модели nn1 и nn2 не инициализированы.Но если мы просто удалим строку

nn1.set_weights(nn2.get_weights())

или удалим строку

K.set_session(tf.Session())

, тогда мы сможем получить правильную скорость обучения 0.001.

Это действительно беспокоит меня, потому что я не знаю причину этой проблемы.Особенно я не понимаю отношения между keras моделью и backend сессией.Как решить проблему, не удаляя две строки, приведенные выше?

PS: Я понимаю, что это может быть из-за конфликта между сеансами по умолчанию tf.Session и keras.Если самоопределение tf.Session не задано, программа будет работать в сеансе по умолчанию, заданном keras.Однако, когда задано tf.Session, оно отличается от сеанса модели keras.Такая разница приведет к конфликту и ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...