没有将“ input_shape”传递给第一层的顺序模型无法重新加载优化器状态

时间:2019-05-13 10:21:07

标签: tensorflow keras tf.keras

警告:tensorflow:未将input_shape传递给第一层的顺序模型无法重新加载其优化器状态。因此,您的模型将从新初始化的优化器开始。

在尝试加载保存的模型时,我从张量流中遇到了此警告

import tensorflow.keras as keras
import tensorflow as tf

mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train = tf.keras.utils.normalize(x_train, axis=1)
x_test = tf.keras.utils.normalize(x_test, axis=1)

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10, activation=tf.nn.softmax))

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=3)

model.save('epic_num_reader.model')
new_model = tf.keras.models.load_model('epic_num_reader.model')
predictions = new_model.predict(x_test)

3 个答案:

答案 0 :(得分:1)

升级到TF 1.14后出现了相同的问题,我对此进行了修复,更改了第一层的定义:

model.add(tf.keras.layers.Flatten())

对此

model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))

其中28是要展平的输入地图的大小(在我们的示例中为mnix像素)

答案 1 :(得分:0)

如警告所示,第一层需要参数input_shape。在您的情况下,这将是Flatten层。

在keras文档中,有一个额外的部分介绍了顺序API。有关更多信息,请参见here

答案 2 :(得分:0)

model.add(tf.keras.layers.Flatten( input_shape =(28,28)))

对于tf 1.14之后的第一层,要求使用输入类型,即特定图像的尺寸。

或者在检索模型时可能会收到警告,导致优化器无法正常工作