【问题标题】:GPT-2 Continue training from checkpointGPT-2 从检查点继续训练
【发布时间】:2020-05-22 15:52:45
【问题描述】:

我正在尝试使用 GPT-2-simple 的 colab 设置从保存的检查点继续训练:

https://colab.research.google.com/drive/1SvQne5O_7hSdmPvUXl5UzPeG5A6csvRA#scrollTo=aeXshJM-Cuaf

但我就是不能让它工作。从我的 googledrive 加载保存的检查点工作正常,我可以使用它来生成文本,但我无法从该检查点继续训练。在gpt2.finetune () 中,我输入了restore.from='latest"overwrite=True,我一直在尝试使用相同的run_name 和不同的run_name,并使用overwrite=True,而不是。正如建议的那样,我也尝试在两者之间重新启动运行时,但这没有帮助,我不断收到以下错误:

"ValueError: Variable model/wpe already exists, disallowed. Did you mean to set reuse=True 
or reuse=tf.AUTO_REUSE in VarScope?"

我假设我需要在继续训练之前运行gpt2.load_gpt2(sess, run_name='myRun'),但是每当我先运行这个时,gtp2.finetune() 就会抛出这个错误

【问题讨论】:

    标签: python tensorflow nlp google-colaboratory gpt-2


    【解决方案1】:

    在微调之前您不需要(也不能)运行load_gpt2()。相反,您只需将run_name 提供给finetune()。我同意这令人困惑。我也遇到了同样的问题。

    sess = gpt2.start_tf_sess()
    
    gpt2.finetune(sess,
        file_name,
        model_name=model_name,
        checkpoint_dir=checkpoint_dir,
        run_name=run_name,
        steps=25,
    )
    

    这将自动从您的checkpoint/run-name 文件夹中获取最新的检查点,加载其权重,并从中断处继续训练。您可以通过检查 epoch 编号来确认这一点 - 它不会从 0 重新开始。例如,如果您之前训练了 25 个 epoch,它将从 26 开始:

    Training...
    
    [26 | 7.48] loss=0.49 avg=0.49
    

    还要注意,要多次运行微调(或加载另一个模型),您通常必须重新启动 python 运行时。您可以改为在每个finetine 命令之前运行它:

    tf.reset_default_graph()
    

    【讨论】:

    • 完全同意,但是我的训练从头开始,我只是将运行时版本更改为 v3 进行微调,而 v2 已经存在。你确定这是它的标准运行方式吗?
    • 如果它对任何偶然发现此问题的人有用 - jameslol 是正确的,但是 - 如果您希望它删除文件夹中已有的内容,则需要 overwrite=True,并且 - checkpoint_dir 应该是保存所有检查点(通常是“检查点”),而不是您要从中加载的特定检查点的目录。它将从 run_name 推断出正确的检查点。所以应该看起来像:gpt2.finetune(sess, file_name, model_name='124M', checkpoint_dir='checkpoint', run_name=run_name, steps=25, overwrite=True)
    【解决方案2】:

    我已经尝试了以下方法并且工作正常:

    tf.reset_default_graph()
    sess = gpt2.start_tf_sess()
    gpt2.finetune(sess,
              steps=n,
              dataset=file_name,
              model_name='model', 
              print_every=z,
              run_name= 'run_name',
              restore_from='latest',
              sample_every=x,
              save_every=y
              )
    

    您必须指定与要恢复训练的模型相同的“run_name”和 hp restore_from = 'latest'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2020-04-07
      • 2021-08-06
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      相关资源
      最近更新 更多