从默认模型gpt-2-simple python上的输入生成文本

时间:2019-10-02 05:36:51

标签: python tensorflow gpt

我一辈子都想不通如何从默认模型中生成带有前缀的文本:

我已经下载了模型,这是我的代码:

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}}]]

知道我在做什么错吗?

1 个答案:

答案 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