tensorflow(11)---断点续训

在训练过程中吧,有的时候会出现训练到一半的时候内存不够,或者其他报错,程序中断,或者先训练一小会,之后有时间继续训练,这时候就需要断点续训操作。

概念:断点续训的意思是因为某些原因还没有训练完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言非常友好

在代码实现上,前面内容不变,还是老三样,导入,构建,compile

import tensorflow as tf
import os
from tensorflow import keras

mnist = keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = mnist.load_data()
x_train,x_test = x_train/255,x_test/255

model = keras.models.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(128,activation='relu'),
    keras.layers.Dense(10,activation='softmax')
])

model.compile(optimizer='adam',
              loss=keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

之后你想知道中断时候的参数啥样,就得先定义一个文件保存你的参数对吧

checkpoint_save_path = './临时文件/mnist.ckpt'

这个ckpt文件就是中断时候保存参数的一个文件,在生成ckpt文件的时候同时会自动生成一个索引文件,以.index后缀结尾

cp_callback = keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True)

keras.callbacks.ModelCheckpoint就是生成目标文件的一个函数,里面参数第一个是文件路径,其他参数设置的为只保存权重,只保存最优参数

然后运行一下,会生成相应文件

import tensorflow as tf
import os
from tensorflow import keras

mnist = keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = mnist.load_data()
x_train,x_test = x_train/255,x_test/255

model = keras.models.Sequential([
    keras.layers.Flatten(),
    keras.layers.Dense(128,activation='relu'),
    keras.layers.Dense(10,activation='softmax')
])

model.compile(optimizer='adam',
              loss=keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

checkpoint_save_path = './临时文件/mnist.ckpt'
# 生成ckpt的同时会生成索引文件
if os.path.exists(checkpoint_save_path+'.index'):
    print('-----------load the model----------------')
    model.load_weights(checkpoint_save_path)

cp_callback = keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,save_weights_only=True,save_best_only=True)
history = model.fit(x_train,y_train,batch_size=32,epochs=5,validation_data=(x_test,y_test),validation_freq=1,callbacks=[cp_callback])
model.summary()


其中------load the model--------那个部分,如果你生成过一次ckpt文件,下次直接读取里面的参数,不用重新训练,这次训练是在上次训练的基础上进行的

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值