簡體   English   中英

我正在嘗試使用 bert 制作一個多 label 文本分類器,我收到下面寫的錯誤

[英]I am trying to make a multi label text classifier using bert, I am getting the error written below

RuntimeError:張量 a (913) 的大小必須與非單維 1 處的張量 b (512) 的大小匹配

def evaluator(text):
  loaded_model = joblib.load(filename)
  encoding = tokenizer(text, return_tensors="pt")
  encoding = {k: v.to(trainer.model.device) for k,v in encoding.items()}
  outputs = trainer.model(**encoding)
  logits = outputs.logits
  # apply sigmoid + threshold
  sigmoid = torch.nn.Sigmoid()
  probs = sigmoid(logits.squeeze().cpu())
  predictions = np.zeros(probs.shape)
  predictions[np.where(probs >= 0.5)] = 1
  # turn predicted id's into actual label names
  predicted_labels = [id2label[idx] for idx, label in enumerate(predictions) if label == 1.0]
  # dataset available
  return predicted_labels
data_text = {}
text_data = []
predict = []
for text in train['text']:
  predict.append(evaluator(text))
  text_data.append(text)
data_text['text'] = text_data
data_text['predictions'] = predict
df = pd.DataFrame.from_dict(data_text)
df

我不明白為什么它不能使用 for 循環工作,但它在單輸入時工作正常。

此錯誤消息源於 dim1 的不匹配層大小,當您構建您的 .network 時,假設在您的分類器中。 它表明您有一個包含 913 output 個神經元的張量(層),后面是包含 512 個神經元的另一層。

我沒有運行你的代碼,但一個有用的調試技巧是使用summary(model.cuda(), (INPUT_SHAPE))打印你的 model 並檢查不匹配的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM