前提・実現したいこと
PyTorchでテキスト分類モデルを作りたいと考えています。
単語数105個で学習したモデルを
「torch.save」でpthファイルに保存して使っています。
学習時と同じ105単語のデータではエラーは出ずに、予測ができました。
しかし、108単語のデータを予測しようと思い
「model.load_state_dict」でpthファイルを読み込むと、下記のエラーになりました。
学習時には無かった新たな単語を含んでいる場合、どのように書くべきなのでしょうか。
そもそも、新しい単語がある場合は再度学習が必要になるなど
考え方が間違っていたらご指摘いただけると助かります。
何卒よろしくお願いいたします。
参考にしたサイト:https://qiita.com/m__k/items/db1a81bb06607d5b0ec5
発生している問題・エラーメッセージ
エラーメッセージ RuntimeError: Error(s) in loading state_dict for LSTMClassifier: size mismatch for word_embeddings.weight: copying a param with shape torch.Size([105, 100]) from checkpoint, the shape in current model is torch.Size([108, 100]).
該当のソースコード
python
1ソースコード 2class LSTMClassifier(nn.Module): 3 def __init__(self, embedding_dim, hidden_dim, vocab_size, tagset_size): 4 super(LSTMClassifier, self).__init__() 5 self.hidden_dim = hidden_dim 6 self.word_embeddings = nn.Embedding(vocab_size, embedding_dim, padding_idx=0) 7 self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True) 8 self.hidden2tag = nn.Linear(hidden_dim, tagset_size) 9 self.softmax = nn.LogSoftmax() 10 11 def forward(self, sentence): 12 embeds = self.word_embeddings(sentence) 13 _, lstm_out = self.lstm(embeds) 14 tag_space = self.hidden2tag(lstm_out[0]) 15 tag_scores = self.softmax(tag_space.squeeze()) 16 return tag_scores 17 18model = LSTMClassifier(EMBEDDING_DIM, HIDDEN_DIM, VOCAB_SIZE, TAG_SIZE).to(device) 19loss_function = nn.NLLLoss() 20 21optimizer = optim.Adam(model.parameters(), lr=0.001) 22 23model.load_state_dict(torch.load("xxxx.pth"))
あなたの回答
tips
プレビュー