在「機器學習入坑指南(九):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