tf.keras.models.save_model和优化器警告

时间:2018-07-09 19:11:34

标签: python tensorflow optimization machine-learning keras

我使用tf.keras创建了一个顺序模型,如下所示:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8, input_dim=4))
model.add(tf.keras.layers.Dense(3, activation=tf.nn.softmax))

opt = tf.train.AdamOptimizer(learning_rate=0.001)
model.compile(optimizer=opt, loss="categorical_crossentropy", metrics=["accuracy"])

model.summary()

之后,我使用train_on_batch创建了一个培训过程:

EPOCHS=50
for epoch in range(EPOCHS):
  for metrics, labels in dataset:
    # Calculate training loss and accuracy
    tr_loss, tr_accuracy = model.train_on_batch(metrics, labels)

当我尝试保存模型时,会收到警告。我不明白为什么,因为我将优化器作为model.compile的一部分:

tf.keras.models.save_model(
    model,
    "./model/iris_model.h5",
    overwrite=True,
    include_optimizer=True
)
  

警告:tensorflow:TensorFlow优化器无法在实例化后访问优化器属性或优化器状态。因此,我们无法将优化器保存为模型保存文件的一部分。加载模型后,您将不得不再次编译模型。最好改用Keras优化器(请参阅keras.io/optimizers)。

我使用的TF版本是1.9.0-rc2。

2 个答案:

答案 0 :(得分:9)

如警告所示,保存模型时无法保存Tensorflow优化器。而是使用optimizers provided by Keras

opt = tf.keras.optimizers.Adam(lr=0.001)

答案 1 :(得分:1)

将保存诸如tf.keras.optimizers.Adam()之类的优化程序,而不会将tf.train.AdamOptimizer()保存在model.save()上。

在撰写本文时,一些关于TensorFlow的官方教程使用tf.train.*优化器,而我坚信选择tf.keras.optimizers.*是最好的选择。