在「机器学习入坑指南(九):TensorFlow 实战——手写数字识别(MNIST 数据集)」一文中,咱们实现了一个模型,完整的代码以下(原文有详细解析):python
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()) # 把图片展平成 1x784,这里应该指定 shape 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) val_loss, val_acc = model.evaluate(x_test, y_test) print(val_loss) print(val_acc)
若是咱们想保存这个模型,能够使用以下代码机器学习
model.save('epic_num_reader.model')
而后就会不幸地引起 NotImplementedError
为了解决这个问题折腾了半天,后来在 Stack Overflow 上提问,大神告诉我是由于我没有给第一层设置 input_shape 参数,致使模型没有明确的定义,而 Keras 并无实现保存未定义的模型的方法,从而引起了这个错误。学习
因而,把添加第一层的代码改成lua
model.add(tf.keras.layers.Flatten(input_shape=(28,28))) #由于输入的是 28x28 的图像(矩阵)
再次保存模型,就不会报错啦!spa
欢迎访问 Evan 的博客.net