我正在运行这个文件: https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/examples/run_classifier.py
这是一个输入批处理的预测代码:
input_ids = input_ids.to(device)
input_mask = input_mask.to(device)
segment_ids = segment_ids.to(device)
label_ids = label_ids.to(device)
with torch.no_grad():
logits = model(input_ids, segment_ids, input_mask, labels=None)
loss_fct = CrossEntropyLoss()
tmp_eval_loss = loss_fct(logits.view(-1, num_labels), label_ids.view(-1))
eval_loss += tmp_eval_loss.mean().item()
nb_eval_steps += 1
if len(preds) == 0:
preds.append(logits.detach().cpu().numpy())
else:
preds[0] = np.append(preds[0], logits.detach().cpu().numpy(), axis=0)
该任务是二元分类。 我想访问二进制输出。
我已经尝试过这个:
curr_pred = logits.detach().cpu()
if len(preds) == 0:
preds.append(curr_pred.numpy())
else:
preds[0] = np.append(preds[0], curr_pred.numpy(), axis=0)
probablities = curr_pred.softmax(1).numpy()[:, 1]
但是结果看起来很奇怪。所以我不确定这是否是正确的方法。
我的假设 - 我收到最后一层的输出,因此在 softmax 之后,它是真实概率(dim 2 的向量 - 第一类的概率和第二类的概率。)
最佳答案
查看 run_classifier.py 代码的这一部分后:
# copied from the run_classifier.py code
eval_loss = eval_loss / nb_eval_steps
preds = preds[0]
if output_mode == "classification":
preds = np.argmax(preds, axis=1)
elif output_mode == "regression":
preds = np.squeeze(preds)
result = compute_metrics(task_name, preds, all_label_ids.numpy())
你只是缺少:
preds = preds[0]
preds = np.argmax(preds, axis=1)
然后他们只使用 preds 来计算准确性:
def simple_accuracy(preds, labels):
return (preds == labels).mean()
关于python - 如何访问pytorch分类模型的预测? (伯特),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201147/