如何访问pytorch分类模型的预测? (伯特)
How to access the predictions of pytorch classification model? (BERT)
我是运行这个文件:
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)
任务是二进制class化。
我想访问二进制输出。
我试过这个:
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 的向量 - 第一层的概率和第二层的概率 class。)
看完 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()
我是运行这个文件: 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)
任务是二进制class化。 我想访问二进制输出。
我试过这个:
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 的向量 - 第一层的概率和第二层的概率 class。)
看完 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()