首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改torchtext LabelField值

如何更改torchtext LabelField值
EN

Stack Overflow用户
提问于 2021-09-22 13:55:19
回答 1查看 44关注 0票数 0

我使用PyTorch创建了几个模型,每个模型都在一个单独的笔记本中运行。

当使用torch文本字段创建词汇时,它会为每个类分配一个正确的编号,而我最初的类标签也是数字。但为每个类分配的标签与原始类标签不同。我想知道是否有一种方法可以为我的标签单词分配一个确切的数字类。

我的创建torch文本字段的代码:

代码语言:javascript
复制
LABEL = data.LabelField()
LABEL.build_vocab(train_data)

我的结果是:

代码语言:javascript
复制
print(LABEL.vocab.stoi)
defaultdict(None, {'1': 0, '2': 1, '0': 2})

结果是我想要的:

代码语言:javascript
复制
defaultdict(None, {'0': 0, '1': 1, '2': 2})

我为解决方案编写了以下代码。创建这样的this是正确的吗?

代码语言:javascript
复制
 LABEL.build_vocab({'0': 0, '1': 1, '2': 2})

附言:我知道这种赋值只是在模型中使用,一切都很好,但我担心我在测试数据上比较模型结果的时间,每次我看供词矩阵时更担心我的困惑。

EN

回答 1

Stack Overflow用户

发布于 2021-11-01 02:39:35

我不认为这会给你你想要的。如果项出现在数据集中某个min_freq (默认值为min_freq=1)之上,则build_vocab会迭代数据集,并将该项映射到索引。我认为您在上一个示例中给出的内容将告诉build_vocab,项目'0‘出现了0次,因此它不会包含在您的数据集中。

如果你担心在审查过程中把事情搞混,你可以编写一个脚本来获取某个标签的索引,然后获取该索引中的任何内容,并将其映射到具有您想要的索引的新字典。这可能比打乱torchtext构建词汇表的方式容易得多。

EDIT:一个更好的解决方案可能是在定义标签字段时设置use_vocab=False

代码语言:javascript
复制
LABEL = data.LabelField(use_vocab=False)

当你的数据已经是数值型的时候,这在你的例子中是有效的。从torchtext 0.8 docs

use_vocab:是否使用词汇对象。如果为False,则此字段中的数据应该已经是数值数据。默认值:True。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69285712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档