我一辈子都想不通如何从默认模型中生成带有前缀的文本:
我已经下载了模型,这是我的代码:
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}}]]
知道我在做什么错吗?
答案 0 :(得分:0)
您正在尝试先生成而不加载参数。
似乎已下载的模型用于训练(“微调”),但未加载以供生成。
为了生成,该库尝试运行先前保存的Tensorflow模型(TF术语中的“检查点”)。
微调
您可以通过使用自己的数据集(或从the dataset published by the researches开始)为模型训练几个时期来生成检查点。
否则,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 question中说明了完全跳过微调的过程。只需将模型复制到检查点目录(您需要先下载模型,然后查看该链接):
mkdir -p checkpoint/
cp -r models/345M checkpoint/run1