我一辈子都不知道如何从前缀中的默认模型生成文本:
我已经下载了模型,这是我的代码:
import gpt_2_simple as gpt2
model_name = "124M"
sess = gpt2.start_tf_sess()
gpt2.generate(sess, model_name=model_name)
gpt2.generate(sess, model_name=model_name, prefix="<|My name is |>")
但是当我运行它时,出现以下错误:
tensorflow.python.framework.errors_impl.FailedPreconditionError: 2 root error(s) found. (0) Failed precondition: Attempting to use uninitialized value model/h3/mlp/c_proj/w [[{{node model/h3/mlp/c_proj/w/read}}]] [[strided_slice/_33]] (1) Failed precondition: Attempting to use uninitialized value model/h3/mlp/c_proj/w [[{{node model/h3/mlp/c_proj/w/read}}]]
知道我做错了什么吗?
您正在尝试在不先加载参数的情况下生成。
似乎下载的模型用于训练("微调"(,但它们不会加载以进行生成。
对于生成,库尝试运行以前保存的 Tensorflow 模型(TF 术语中的"检查点"(。
微调
您可以通过使用自己的数据集(或从研究发布的数据集中(训练模型几个时期来生成检查点。
否则,gpt-2-simple
会让它变得容易。获取一个包含一些文本的文本文件并对其进行训练:
gpt_2_simple --sample_every 50 finetune yourtext.txt
让它运行几个纪元,看看结果样本。每 100 个纪元将保存一个检查点。一旦你满意,点击CTRL+C
,它将保存最后一个检查点。
然后,您可以使用以下内容生成文本:
gpt_2_simple generate --prefix "Once upon a time" --nsamples 5
gpt_2_simple
工具接受-h
参数寻求帮助。看看其他选项。使用代码库类似于此工具工作流。
无需微调即可生成
作者在此 GitHub 问题中解释了完全跳过微调的过程。只需将模型复制到检查点目录(您需要先下载模型,请查看该链接(:
mkdir -p checkpoint/
cp -r models/345M checkpoint/run1