Pytorch AllenNLP 2.0:Can';无法运行FBetaMultiLabelMeasure

Pytorch AllenNLP 2.0:Can';无法运行FBetaMultiLabelMeasure,pytorch,allennlp,Pytorch,Allennlp,我想计算用allen nlp训练的分类器的f1分数。我使用了allen nlp指南中的工作代码,该代码计算精度,而不是F1,因此我尝试调整代码中的度量 根据文档,并采用相同的输入。(预测:torch.Tensor形状[批次大小,…,数量等级],金色标签:torch.Tensor形状[批次大小,…]) 但由于某些原因,当输入f1多标签度量值时,对精度非常有效的输入会导致运行时错误 我将问题压缩为以下代码段: >>> from allennlp.training.metrics i

我想计算用allen nlp训练的分类器的f1分数。我使用了allen nlp指南中的工作代码,该代码计算精度,而不是F1,因此我尝试调整代码中的度量

根据文档,并采用相同的输入。(预测:
torch.Tensor
形状
[批次大小,…,数量等级]
,金色标签:
torch.Tensor
形状
[批次大小,…]

但由于某些原因,当输入f1多标签度量值时,对精度非常有效的输入会导致运行时错误

我将问题压缩为以下代码段:

>>> from allennlp.training.metrics import CategoricalAccuracy, FBetaMultiLabelMeasure
>>> import torch
>>> labels = torch.LongTensor([0, 0, 2, 1, 0])
>>> logits = torch.FloatTensor([[ 0.0063, -0.0118,  0.1857], [ 0.0013, -0.0217,  0.0356], [-0.0028, -0.0512,  0.0253], [-0.0460, -0.0347,  0.0400], [-0.0418,  0.0254,  0.1001]])
>>> labels.shape
torch.Size([5])
>>> logits.shape
torch.Size([5, 3])
>>> ca = CategoricalAccuracy()
>>> f1 = FBetaMultiLabelMeasure()
>>> ca(logits, labels)
>>> f1(logits, labels)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../lib/python3.8/site-packages/allennlp/training/metrics/fbeta_multi_label_measure.py", line 130, in __call__
true_positives = (gold_labels * threshold_predictions).bool() & mask & pred_mask
RuntimeError: The size of tensor a (5) must match the size of tensor b (3) at non-singleton dimension 1
>>来自allennlp.training.metrics导入分类准确性,FBETAMILIBELMEASURE
>>>进口火炬
>>>标签=火炬长传感器([0,0,2,1,0])
>>>罗吉斯=火炬浮动张量([0.0063,-0.0118,0.1857],[0.0013,-0.0217,0.0356],-0.0028,-0.0512,0.0253],-0.0460,-0.0347,0.0400],-0.0418,0.0254,0.1001])
>>>标签.形状
火炬尺寸([5])
>>>罗吉斯·夏普酒店
火炬尺寸([5,3])
>>>ca=分类准确度()
>>>f1=FBetaMultiLabelMeasure()
>>>ca(登录、标签)
>>>f1(登录、标签)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“../lib/python3.8/site packages/allennlp/training/metrics/fbeta\u multi\u label\u measure.py”,第130行,在调用中__
真正=(黄金标签*阈值预测)。bool()&掩码和pred\u掩码
RuntimeError:张量a(5)的大小必须与张量b(3)在非单态维度1的大小相匹配

为什么会发生这种错误?我在这里遗漏了什么?

您想使用
FBetaMeasure
,而不是
FBetaMultiLabelMeasure
。“多标签”意味着您可以指定多个正确答案,但“分类准确性”只允许一个正确答案。这意味着您必须在标签中指定另一个标注


我怀疑
FBetaMultiLabelMeasure
的文档有误导性。我会研究修复它。

我在这里为文档做了修复: