keyerror: 2

huangapple go评论96阅读模式
英文:

encoded_sentence = [label2int[start_index] for generated_text in input_sentence] keyerror:2

问题

这是一个SentenceRecognitionModel,它不能工作,我在这方面没有太多经验,能有人帮帮我吗?

  1. 这部分是代码它用于导入所需的库和模块
  1. # 将文本中的字符转换成数字
  2. chars = list(set(text))
  1. # 建立标签,用于存储不同的句子
  2. labels = [""]
  1. # 建立标签的数字映射
  2. int2label = dict(enumerate(labels))
  3. label2int = {label: index for index, label in int2label.items()}
  1. # 将文本进行编码
  2. encoded_labels = [label2int[label] for label in labels]
  1. # 建立字符和数字的映射
  2. int2char = dict(enumerate(chars))
  3. char2int = {char: index for index, char in int2char.items()}
  1. # 将文本进行编码
  2. encoded_text = [char2int[char] for char in text]
  1. # 定义训练模型
  2. class SentenceRecognitionModel(nn.Module):
  1. # 創建模型
  2. model = SentenceRecognitionModel(len(chars),embedding_dim = 256, hidden_dim = 64, num_layers = 2, num_classes=len(labels))
  1. # 創建優化器
  2. optimizer = optim.Adam(model.parameters())
  1. # 紀錄模型訓練損耗
  2. loss_fn = nn.CrossEntropyLoss()
  1. # 訓練模型
  2. for epoch in range(num_epochs):
  1. # 將模型設為推理模式,以保持一致的輸出
  2. model.eval()
  1. # 接收用户输入的句子
  2. input_sentence = input("请输入句子:")
  1. # 判断输入的句子是否存在于训练数据中
  2. if input_sentence not in labels:
  1. # 将模型的状态保存到文件中
  2. model.save(model.state_dict(), 'SentenceRecognizedModel.pt')

在运行代码时,出现了KeyError: 2的错误。encoded_sentence = [label2int[start_index] for generated_text in input_sentence] 将句子转换为数字,但是AI模型可能无法接受这样的输入。

英文:

This is a SentenceRecoghizedModel,it can't work,I don't have much experience on this,can somebody help me?

  1. import torch
  2. import torch.nn as nn
  3. import torch.optim as optim
  4. #導入訓練模型
  5. text = ""
  6. #將text中的字數轉換成數字
  7. chars = list(set(text))
  8. #建立labels,用以儲存不同的句子
  9. labels = [""]
  10. int2label = dict(enumerate(labels))
  11. label2int = {label: index for index, label in int2label.items()}
  12. encoded_labels = [label2int[label] for label in labels]
  13. int2char = dict(enumerate(chars))
  14. char2int = {char: index for index, char in int2char.items()}
  15. encoded_text = [char2int[char] for char in text]
  16. #定義訓練環境
  17. class SentenceRecognitionModel(nn.Module):
  18. def __init__(self, vocab_size, embedding_dim, hidden_dim, num_layers,num_classes):
  19. super().__init__()
  20. self.embedding = nn.Embedding(vocab_size,embedding_dim)
  21. self.lstm = nn.LSTM(embedding_dim,hidden_dim, num_layers)
  22. self.fc = nn.Linear(hidden_dim, num_classes)
  23. def forward(self, x):
  24. x = self.embedding(x)
  25. x = self.fc(x)
  26. return x
  27. #創建模型
  28. model = SentenceRecognitionModel(len(chars),embedding_dim = 256, hidden_dim = 64, num_layers = 2, num_classes=len(labels))
  29. #創建優化器
  30. optimizer = optim.Adam(model.parameters())
  31. #紀錄模型訓練損耗
  32. loss_fn = nn.CrossEntropyLoss()
  33. #訓練模型
  34. num_epochs = 25000 #訓練二萬五千次模型
  35. for epoch in range(num_epochs):
  36. #將每一次訓練前的梯度設為零,這樣在下次迭代時就不會衝突到了
  37. optimizer.zero_grad()
  38. input_seq = torch.tensor(encoded_text).unsqueeze(0)
  39. target_label = torch.tensor(encoded_labels).unsqueeze(0)
  40. output = model(input_seq)
  41. loss = loss_fn(output.squeeze(), target_label.squeeze())
  42. loss.backward()
  43. optimizer.step()
  44. if (epoch+1) % 10 == 0:
  45. print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')
  46. #將模型設為推理模式,以讓模型的輸出保持一致
  47. model.eval()
  48. while True:
  49. # 接收用戶輸入的句子
  50. input_sentence = input("請輸入句子:")
  51. if input_sentence not in labels:
  52. print("輸入的句子不存在於訓練數據中")
  53. else:
  54. start_index = label2int[input_sentence]
  55. generated_text = int2char[start_index]
  56. # 選擇要生成的文本長度
  57. num_generated = 100
  58. # 對輸入的句子進行預處理,將其編碼為數字
  59. encoded_sentence = [label2int[start_index] for generated_text in input_sentence]
  60. input_seq = torch.tensor(encoded_sentence).unsqueeze(0)
  61. # 將輸入的句子傳遞到模型中
  62. with torch.no_grad():
  63. output = model(input_seq)
  64. #使用模型去辨識句子
  65. output_idx = torch.argmax(output.squeeze()).item()
  66. recognized_label = int2label[output_idx]
  67. # 輸出結果
  68. print(f"Recognized Label: {recognized_label}")
  69. FILE = 'model_state_dict.pt'
  70. model.save(model.state_dict(), 'SentenceRecognizedModel.pt')

When I run the code,the following code appear KeyError: 2 wrong

  1. encoded_sentence = [label2int[start_index] for generated_text in input_sentence]
  2. input_seq = torch.tensor(encoded_sentence).unsqueeze(0)

encoded_sentence = [label2int[start_index] for generated_text in input_sentence] is convert sentences into numbers,but ai model do not accept.

答案1

得分: 0

终于,我解决了代码问题。

  1. encoded_sentence = [label2int[start_index] for generated_text in input_sentence]

应该改成:

  1. encoded_sentence = [start_index]
  2. 因为start_index是整数,所以将其添加到encoded_sentence中就可以了。
英文:

Finally, I solved the code problem.

  1. encoded_sentence = [label2int[start_index] for generated_text in input_sentence]

should be changed to this

  1. encoded_sentence = [start_index]

because the start_index is int, so add it to encoded_sentence is just ok.

huangapple
  • 本文由 发表于 2023年2月8日 11:37:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/75381157.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定