使用TensorFlow的增量训练

使用TensorFlow的增量训练,tensorflow,Tensorflow,我想训练一个模型来分类90K标签,所以我使用了所谓的增量训练 我首先训练模型只对1K标签进行分类,然后再添加1K标签,并将最终FC层的输出维度扩展到2K,然后训练更多的历元。之后,我又添加了1K标签,以此类推 请注意,它不是微调,即最后一个FC之前的所有参数都是固定的,因此我可以缓存输出特性。在我的例子中,我需要更新每个阶段中的所有变量 我设计的解决方案是: 培训1K标签 保存模型 修改图形,使最后一个FC层输出2K维度 初始化所有变量 加载上一个检查点,该检查点将覆盖所有参数,但最后一层的权重

我想训练一个模型来分类90K标签,所以我使用了所谓的增量训练

我首先训练模型只对1K标签进行分类,然后再添加1K标签,并将最终FC层的输出维度扩展到2K,然后训练更多的历元。之后,我又添加了1K标签,以此类推

请注意,它不是微调,即最后一个FC之前的所有参数都是固定的,因此我可以缓存输出特性。在我的例子中,我需要更新每个阶段中的所有变量

我设计的解决方案是:

  • 培训1K标签
  • 保存模型
  • 修改图形,使最后一个FC层输出2K维度
  • 初始化所有变量
  • 加载上一个检查点,该检查点将覆盖所有参数,但最后一层的权重除外
  • 再次训练并重复
  • 因此,这里的关键是实现部分恢复检查点

    在TensorFlow中,我使用以下代码加载检查点:

    saver.restore(sess, "model.ckpt")
    
    但是,当存在形状不匹配时,它将失败


    在如何部分恢复/初始化变量,或者如何以另一种方式实施增量培训方面,有人能提供帮助吗?

    这目前并不容易做到。我们正在积极添加新的API以使其更容易

    同时,如果您确实确定,:),您可以在更改FC层的大小时尝试以下操作:

    • 创建一个读卡器: reader=tf.train.NewCheckpointReader(您的检查点文件)
    • 加载检查点文件中的所有变量: cur_vars=reader.get_variable_to_shape_map().keys()
    • 删除原始FC层: cur\u vars\u without\u fc=cur\u vars-您的\u fc\u图层\u var\u名称
    • 使用以下变量创建一个保护程序: saver=tf.saver(不带fc的cur\u vars\u) saver.restore(sess,您的检查点文件)
    • 初始化新FC层的变量: sess.run([您的\u fc\u层\u变量初始值设定项])
    希望有帮助

    雪利酒