tesorflow模型保存代碼

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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章