Keras模型与后端会话之间的关系

时间:2018-09-26 09:08:40

标签: session tensorflow keras

众所周知,tensorflow使用静态图来定义模型,我们必须运行一个会话来进行评估。 keras似乎更简单,可以用作公用库。但是,当我们使用keras来构建模型和backend.set_session的{​​{1}}时,会出现一些问题。看下面的例子

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会话之间的关系。如何在不删除上面给出的两行的情况下解决问题?

PS:我意识到这可能是由于backendtf.Session默认会话之间的冲突所致。如果未设置自定义keras,则程序将在keras给出的默认会话下运行。但是,给定tf.Session时,它与tf.Session模型的会话不同。这种差异会引起冲突和错误。

0 个答案:

没有答案