tensorflow、keras学习save and restore models

import os
import tensorflow as tf
from tensorflow import keras
#tf.__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=tf.nn.relu,input_shape=(784,)),
        keras.layers.Dropout(0.2),
        keras.layers.Dense(10,activation=tf.nn.softmax)
    ])
    model.compile(optimizer=tf.keras.optimizers.Adam(),
                 loss=tf.keras.losses.sparse_categorical_crossentropy,
                 metrics=['accuracy'])
    return model

model = create_model()
model.summary()

checkpoint_path = 'training_1/cp.ckpt'
checkpoint_dir=os.path.dirname(checkpoint_path)
print(checkpoint_dir)
cp_callback=tf.keras.callbacks.ModelCheckpoint(checkpoint_path,
                                              save_weights_only=True,
                                              verbose=1)#是否显示进度条
model = create_model()
model.fit(train_images,train_labels,epochs=10,
         validation_data=(test_images,test_labels),
         callbacks = [cp_callback])
#返回的是history对象

model_1 = create_model()
loss,acc = model_1.evaluate(test_images,test_labels)
print("Untrained model,accurcy:{:5.2f}%".format(100*acc))

#1000/1000 [==============================] - 0s 168us/step
#Untrained model,accurcy: 9.20%

model_1.load_weights(checkpoint_path)
loss,acc = model_1.evaluate(test_images,test_labels)#返回的是损失和正确率的元组
print("Restored model,accurcy:{:5.2f}%".format(100*acc))

#1000/1000 [==============================] - 0s 80us/step
#Restored model,accurcy:86.80%

#边训练边存储权重
checkpoint_path = "training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

cp_callback = tf.keras.callbacks.ModelCheckpoint(
    checkpoint_path,verbose=1,save_weights_only=True,
    period=5)#每隔5 epochs存储一次
model = create_model()
model.fit(train_images,train_labels,
         epochs=50,callbacks=[cp_callback],
         validation_data=(test_images,test_labels),
          verbose=0)
pwd = os.getcwd()
filename_list = os.listdir(pwd+'/training_2')
filename_last = filename_list[-1]
model_2 = create_model()
model_2.load_weights('training_2/'+filename_last)
model_2.evaluate(test_images,test_labels)
#1000/1000 [==============================] - 0s 138us/step
#[0.49394365420937536, 0.878]



#手动存储权重
model.save_weights('checkpoints/my_checkpoints')
model_3 = create_model()
model_3.load_weights('checkpoints/my_checkpoints')
model_3.evaluate(test_images,test_labels)

#1000/1000 [==============================] - 0s 184us/step
#[0.49394365420937536, 0.878]

#存储整个模型
model = create_model()
model.fit(train_images,train_labels)
model.save('whole_model/my_model.h5')
model_4 = keras.models.load_model('whole_model/my_model.h5')
model_4.summary()
model_4.evaluate(test_images,test_labels)

#[0.71717708683013914, 0.79400000000000004]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值