TensorFlow实现模型断点训练,checkpoint模型载入

深度学习中,模型训练一般都需要很长的时间,由于很多原因,导致模型中断训练,下面介绍继续断点训练的方法。

方法一:载入模型时,不必指定迭代次数,一般默认最新

# 保存模型
saver = tf.train.Saver(max_to_keep=1) # 最多保留最新的模型

# 开启会话
with tf.Session() as sess:
    # saver.restore(sess, './log/' + "model_savemodel.cpkt-" + str(20000))
    sess.run(tf.global_variables_initializer())
    ckpt = tf.train.get_checkpoint_state('./log/')  # 注意此处是checkpoint存在的目录,千万不要写成‘./log’
    if ckpt and ckpt.model_checkpoint_path:
        saver.restore(sess,ckpt.model_checkpoint_path) # 自动恢复model_checkpoint_path保存模型一般是最新
        print("Model restored...")
    else:
        print('No Model')

方法二:载入时,指定想要载入模型的迭代次数

     需要到Log文件夹中,查看当前迭代的次数,如下:此时为111000次。

TensorFlow实现模型断点训练,checkpoint模型载入_第1张图片

# 保存模型
saver = tf.train.Saver(max_to_keep=1)
# 开启会话

with tf.Session() as sess:
    saver.restore(sess, './log/' + "model_savemodel.cpkt-" + str(111000))
    sess.run(tf.global_variables_initializer())

载入模型后,会继续端点处的变量继续训练,那么是否可以减小剩余的需要的迭代次数?

模型断点训练效果展示:

训练到167000次后,载入模型重新训练。设置迭代次数为10000次,(d_step=1000)。原始设置的迭代的次数为1000000,已经训练了167000次。

Model restored...
Iter:0, D_loss:0.5139875411987305, G_loss:2.8023970127105713
Iter:1000, D_loss:0.4400891065597534, G_loss:2.781547784805298
Iter:2000, D_loss:0.5169454216957092, G_loss:2.58009934425354
Iter:3000, D_loss:0.4507023096084595, G_loss:2.584151268005371
Iter:4000, D_loss:0.5746167898178101, G_loss:2.5365757942199707
Iter:5000, D_loss:0.5288565158843994, G_loss:2.426676034927368
Iter:6000, D_loss:0.549595057964325, G_loss:2.820535659790039
Iter:7000, D_loss:0.32620012760162354, G_loss:2.540236473083496
Iter:8000, D_loss:0.4363398551940918, G_loss:2.5880446434020996
Iter:9000, D_loss:0.569464921951294, G_loss:2.5133447647094727
done!

保存的图片仍然从头开始编号,会覆盖掉之前的图片。

TensorFlow实现模型断点训练,checkpoint模型载入_第2张图片

以前对应编号的采样图片为:

TensorFlow实现模型断点训练,checkpoint模型载入_第3张图片

若有朋友有高见,还请不吝赐教。

你可能感兴趣的:(tensorflow)