Keras.model.save() 引發(fā) NotImplementedError 如何解決

「機器學(xué)習(xí)入坑指南(九):TensorFlow 實戰(zhàn)——手寫數(shù)字識別(MNIST 數(shù)據(jù)集)」一文中,我們實現(xiàn)了一個模型,完整的代碼如下(原文有詳細(xì)解析):

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,這里應(yīng)該指定 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')

然后就會不幸地引發(fā) NotImplementedError


image

為了解決這個問題折騰了半天,后來在 Stack Overflow 上提問,大神告訴我是因為我沒有給第一層設(shè)置 input_shape 參數(shù),導(dǎo)致模型沒有明確的定義,而 Keras 并沒有實現(xiàn)保存未定義的模型的方法,從而引發(fā)了這個錯誤。

于是,把添加第一層的代碼改為

model.add(tf.keras.layers.Flatten(input_shape=(28,28))) #因為輸入的是 28x28 的圖像(矩陣)

再次保存模型,就不會報錯啦!

歡迎訪問 Evan 的博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容