from __future__ import absolute_import, division, print_function, unicode_literals import os import tensorflow as tf from tensorflow import keras print(tf.version.VERSION) (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data() train_labels = train_labels[:1000] test_labels = test_labels[:1000] train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0 test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0 # 定義一個簡單的序列模型 def create_model(): model = tf.keras.models.Sequential([ keras.layers.Dense(512, activation='relu', input_shape=(784,)), keras.layers.Dropout(0.2), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model # 創建一個基本的模型實例 model = create_model() # 顯示模型的結構 model.summary()# 定義一個簡單的序列模型 def create_model(): model = tf.keras.models.Sequential([ keras.layers.Dense(512, activation='relu', input_shape=(784,)), keras.layers.Dropout(0.2), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam',#這個是模型編譯的過程 loss='sparse_categorical_crossentropy', metrics=['accuracy']) return model """ # 創建一個基本的模型實例 model = create_model() # 顯示模型的結構 model.summary() #model.fit(test_images,test_labels)#這個就是訓練 checkpoint_path = "training_1/cp.ckpt"#這個是保存模型的路徑 checkpoint_dir = os.path.dirname(checkpoint_path) # 創建一個保存模型權重的回調 cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, save_weights_only=True, verbose=1) # 使用新的回調訓練模型 model.fit(train_images, train_labels, epochs=10, validation_data=(test_images,test_labels), callbacks=[cp_callback]) # 通過回調訓練 # 這可能會生成與保存優化程序狀態相關的警告。 # 這些警告(以及整個筆記本中的類似警告)是防止過時使用,可以忽略。 """ ''' checkpoint_path = "training_1/cp.ckpt"#這個是保存模型的路徑 model=create_model() # 加載權重 model.load_weights(checkpoint_path)#這個是加上了模型 # 重新評估模型 loss,acc = model.evaluate(test_images, test_labels, verbose=2) print("Restored model, accuracy: {:5.2f}%".format(100*acc)) # 在文件名中包含 epoch (使用 `str.format`) ''' checkpoint_path = "training_2/cp-{epoch:04d}.ckpt" checkpoint_dir = os.path.dirname(checkpoint_path) # 創建一個回調,每 5 個 epochs 保存模型的權重 cp_callback = tf.keras.callbacks.ModelCheckpoint( filepath=checkpoint_path, verbose=1, save_weights_only=True, period=5) # 創建一個新的模型實例 #model = create_model() """ # 使用 `checkpoint_path` 格式保存權重 model.save_weights(checkpoint_path.format(epoch=0)) # 使用新的回調*訓練*模型 model.fit(train_images, train_labels, epochs=50, callbacks=[cp_callback], validation_data=(test_images,test_labels), verbose=0) """ """ latest = tf.train.latest_checkpoint(checkpoint_dir) print(latest) # 加載以前保存的權重 model.load_weights(latest) # 重新評估模型 loss, acc = model.evaluate(test_images, test_labels, verbose=2) print("Restored model, accuracy: {:5.2f}%".format(100*acc)) """ """ # 創建一個新的模型實例 model = create_model() # 訓練模型 #model.fit(train_images, train_labels, epochs=5)#預測的時候需要關掉 # 將整個模型保存爲HDF5文件 #model.save('my_model.h5') # 重新創建完全相同的模型,包括其權重和優化程序 new_model = keras.models.load_model('my_model.h5') # 顯示網絡結構 new_model.summary() loss, acc = new_model.evaluate(test_images, test_labels, verbose=2) print("Restored model, accuracy: {:5.2f}%".format(100*acc)) """ # #這個demo是保存整個結構框架和模型 # model = create_model() # # model.fit(train_images, train_labels, epochs=5) # import time # saved_model_path = "./saved_models/{}".format(int(time.time())) # # tf.keras.experimental.export_saved_model(model, saved_model_path) # #print(saved_model_path) saved_model_path="./saved_models/1592991564" new_model = tf.keras.experimental.load_from_saved_model(saved_model_path) # 顯示網絡結構 new_model.summary() # 必須在評估之前編譯模型。 # 如果僅部署已保存的模型,則不需要此步驟。 new_model.compile(optimizer=model.optimizer, # 保留已加載的優化程序 loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 評估已恢復的模型 loss, acc = new_model.evaluate(test_images, test_labels, verbose=2) print("Restored model, accuracy: {:5.2f}%".format(100*acc))
tesorflow模型保存代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.