1

我一生都无法弄清楚如何从默认模型中生成文本,并输入前缀:

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

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

知道我做错了什么吗?

4

1 回答 1

1

您正在尝试在不先加载参数的情况下生成。

下载的模型似乎用于训练(“微调”),但没有加载生成。

对于生成,库尝试运行之前保存的 Tensorflow 模型(TF 术语中的“检查点”)。

微调

您可以通过使用自己的数据集(或使用研究发布的数据集)训练模型几个时期来生成检查点。

否则,gpt-2-simple很容易。获取包含一些文本的文本文件并对其进行训练:

gpt_2_simple --sample_every 50 finetune yourtext.txt

让它运行几个 epoch 并查看结果样本。每 100 个 epoch 将保存一个检查点。一旦你满意,点击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
于 2019-10-04T17:27:36.567 回答