保存模型训练结果的方式

导入库&加载数据

import os
import tensorflow as tf
from tensorflow import keras

(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data(r"C:\Users\31035\.keras\datasets\mnist.npz")

train_labels = train_labels[0:9000]
test_labels = test_labels[9000:10000]
train_images = train_images[0:9000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[9000:10000].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()

保存模型训练结果的方式_第1张图片

保存训练模型

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])  # 通过回调训练

# 这可能会生成与保存优化程序状态相关的警告。
# 这些警告(以及整个笔记本中的类似警告)是防止过时使用,可以忽略。

加载权重

创建一个模型实例(未加载权重)

model = create_model()

# 评估模型
loss, acc = model.evaluate(test_images,  test_labels, verbose=2)
print("Untrained model, accuracy: {:5.2f}%".format(100*acc))

#结果:1000/1 - 0s - loss: 2.2785 - accuracy: 0.1030
#Untrained model, accuracy: 10.30%

加载权重

model.load_weights(checkpoint_path)

# 重新评估模型
loss,acc = model.evaluate(test_images,  test_labels, verbose=2)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))
#结果:1000/1 - 0s - loss: 0.3866 - accuracy: 0.8710
#Restored model, accuracy: 87.10%

分部保存模型训练结果

# 在文件名中包含 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),
         )

加载

# 创建一个新的模型实例
model = create_model()

# 加载以前保存的权重
model.load_weights('training_2\\cp-0050.ckpt')#转义字符\

# 重新评估模型
loss, acc = model.evaluate(test_images,  test_labels, verbose=6)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

#结果:Restored model, accuracy: 87.50%

你可能感兴趣的:(tensorflow与图像处理,tensorflow,深度学习,神经网络,机器学习)