加载保存的顺序模型时,我会收到有关模型缺少输入形状和优化器状态重置的警告

时间:2019-10-16 15:31:18

标签: tf.keras

我有两个LSTM的模型,顶部有一个致密层。当我保存模型并重新加载模型以进行更多培训时,我得到警告:没有传递input_shape到第一层的顺序模型无法重新加载其优化器状态。结果,您的模型从新初始化的优化器开始。 我不明白为什么在模型中定义输入形状时会收到此警告。

# create data feeder from (1m,6) and (30k,3) datasets
def windowed_dataset(series, results, window_size=120, batch_size=1024):
    data = tf.data.Dataset.from_tensor_slices((series, results))
    data = data.apply(sliding.sliding_window_batch(window_size=window_size, window_shift=1))
    data = data.shuffle(series.shape[0]-window_size+1, reshuffle_each_iteration=False)
    return data.batch(batch_size).prefetch(1).repeat()


from tensorflow.contrib.data.python.ops import sliding

# data feeder to model
shuffled_train=windowed_dataset(x_train, y_train)
shuffled_valid=windowed_dataset(x_valid, y_valid)

# model
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64,input_shape=(120,6), return_sequences=True)))
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64,return_sequences=True)))
model.add(tf.keras.layers.Dense(32, activation = 'relu'))
model.add(tf.keras.layers.Dense(3, activation = 'sigmoid'))

model.compile(loss="binary_crossentropy",optimizer="adam", metrics=["mae"])

model.fit(shuffled_train, steps_per_epoch=987, epochs=10, validation_data=shuffled_valid, validation_steps=32 )

print(model.summary())
model.save('//temp/my_lines.h5')

#continue training
model = tf.keras.models.load_model('//temp/my_lines.h5')
model.fit(shuffled_train, steps_per_epoch=987, epochs=1, validation_data=shuffled_valid, validation_steps=32 )

加载模型后,我在第一次运行中达到的错误率就丢失了,它开始重新训练,如何使它从停下来的地方继续呢?

1 个答案:

答案 0 :(得分:0)

我做了一些挖掘,找到了答案。输入形状需要指定为一个层,而不是作为参数添加到其他第一层。

所以,而不是

model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64,input_shape=(120,6), return_sequences=True)))

应为两行:

model.add(tf.keras.layers.Input(shape=(120, 6)))
model.add(tf.keras.layers.LSTM(64, return_sequences=True))