【问题标题】:Accuracy score in pyTorch LSTMpyTorch LSTM 中的准确度得分
【发布时间】:2017-10-13 05:47:43
【问题描述】:

我一直在wikigold.conll NER data set上运行this LSTM tutorial

training_data 包含序列和标签的元组列表,例如:

training_data = [
    ("They also have a song called \" wake up \"".split(), ["O", "O", "O", "O", "O", "O", "I-MISC", "I-MISC", "I-MISC", "I-MISC"]),
    ("Major General John C. Scheidt Jr.".split(), ["O", "O", "I-PER", "I-PER", "I-PER"])
]

我写下了这个函数

def predict(indices):
    """Gets a list of indices of training_data, and returns a list of predicted lists of tags"""
    for index in indicies:
        inputs = prepare_sequence(training_data[index][0], word_to_ix)
        tag_scores = model(inputs)
        values, target = torch.max(tag_scores, 1)
        yield target

这样我可以得到训练数据中特定索引的预测标签。

但是,我如何评估所有训练数据的准确度得分。

准确度是,所有句子中正确分类的单词数量除以单词数。

这是我想出来的,极其缓慢和丑陋:

y_pred = list(predict([s for s, t in training_data]))
y_true = [t for s, t in training_data]
c=0
s=0
for i in range(len(training_data)):
    n = len(y_true[i])
    #super ugly and ineffiicient
    s+=(sum(sum(list(y_true[i].view(-1, n) == y_pred[i].view(-1, n).data))))
    c+=n

print ('Training accuracy:{a}'.format(a=float(s)/c))

如何在 pytorch 中有效地做到这一点?

附注: 我一直在尝试使用sklearn's accuracy_score 失败

【问题讨论】:

标签: python scikit-learn deep-learning pytorch


【解决方案1】:

我会使用 numpy 以便不在纯 python 中迭代列表。

结果是一样的,但是运行的更快

def accuracy_score(y_true, y_pred):
    y_pred = np.concatenate(tuple(y_pred))
    y_true = np.concatenate(tuple([[t for t in y] for y in y_true])).reshape(y_pred.shape)
    return (y_true == y_pred).sum() / float(len(y_true))

这是如何使用它:

#original code:
y_pred = list(predict([s for s, t in training_data]))
y_true = [t for s, t in training_data]
#numpy accuracy score
print(accuracy_score(y_true, y_pred))

【讨论】:

    【解决方案2】:

    你可以像这样使用sklearn's accuracy_score

    values, target = torch.max(tag_scores, -1)
    accuracy = accuracy_score(train_y, target)
    print("\nTraining accuracy is %d%%" % (accuracy*100))
    

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 2020-04-07
      • 2020-04-04
      • 2018-10-14
      • 1970-01-01
      • 2020-11-07
      • 2019-10-23
      • 2023-04-05
      相关资源
      最近更新 更多