【问题标题】:Save and load vocab and weight for torchtext to do inference保存和加载 vocab 和 weight 以供 torchtext 进行推理
【发布时间】:2022-01-03 13:21:28
【问题描述】:

我已关注this example 使用torchtext 构建文本分类器。

完成训练后,我保存了词汇和权重,但是当我再次加载它们以使用验证数据进行推断时,准确度为零。

我发现了一个类似的问题Using torchtext for inference,但它并没有解决我的问题

def save_vocab(vocab):
    import pickle
    output = open('vocab.pkl', 'wb')
    pickle.dump(vocab, output)
    output.close()

save_vocab(TEXT.vocab)    
torch.save(model.state_dict(), 'saved_weights.pt')
def read_vocab(path):
    #read vocabulary pkl 
    import pickle
    pkl_file = open(path, 'rb')
    vocab = pickle.load(pkl_file)
    pkl_file.close()
    return vocab

vocab = read_vocab('vocab.pkl')
TEXT = data.Field(batch_first=True, include_lengths = True)
LABEL = data.LabelField(dtype = torch.float, batch_first=True)

TEXT.vocab = vocab
LABEL.vocab = vocab

pretrained_embeddings = TEXT.vocab.vectors
model.embedding.weight.data.copy_(pretrained_embeddings)
model.embedding.weight.data[PAD_IDX] = torch.zeros(EMBEDDING_DIM)

#load weights
path='saved_weights.pt'
model.load_state_dict(torch.load(path));
model.eval();

model = model.cuda()
acc = evaluate(model, valid_iterator)

谢谢。

【问题讨论】:

  • torchtext API 发生了巨大变化,使其更加标准并且与 PyTorch 生态系统的其他部分具有互操作性。能分享一下你用的是哪个版本吗?它看起来像旧版本。
  • 谢谢。火炬版本是1.10.0a0+ecc3718。

标签: text pytorch lstm torchtext


【解决方案1】:

一些想法:

首先,我建议直接使用验证数据集检查您的模型。无需保存所有内容并再次加载,只需使用您创建的模型并在验证数据集上运行它。您的问题可能与保存和重新加载无关。

此外,正如上面评论中提到的 erip,torchtext 发生了重大变化。我建议将您的模型迁移到新版本。有一个教程可以做到这一点here。新版本可用的教程较少,但工作流程更加直观。

最后,我建议遍历您的词汇表和嵌入,并在保存之前和加载之后打印项目。如果那里有问题,它应该很明显地显示出来。

【讨论】:

  • 谢谢。火炬版本为 1.10.0a0+ecc3718。我在培训期间进行了验证检查。但我想训练模型,然后用词汇表保存训练后的权重,以便以后用新数据进行推理。我将检查教程并更新代码。谢谢。
  • 不客气。使用新数据时,您可能会遇到词汇外的问题。
猜你喜欢
  • 2020-10-25
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2019-11-08
相关资源
最近更新 更多