了解 LSTM 预测的输出
Understanding the output of LSTM predictions
这是一个15-classclass化模型,OUTPUT_DIM = 15
。我正在尝试输入这样的频率向量 'hi my name is' => [1,43,2,56]
。
当我调用 predictions = model(x_train[0])
时,我得到一个大小为 torch.Size([100, 15])
的数组,而不仅仅是一个包含 15 个 class 的一维数组,如下所示:torch.Size([15])
.发生了什么?为什么这是输出?我该如何解决?预先感谢您,更多信息如下。
模型(from main docs)如下:
import torch.nn as nn
class RNN(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
super().__init__()
self.word_embeddings = nn.Embedding(vocab_size, embedding_dim)
self.lstm = nn.LSTM(embedding_dim, hidden_dim)
self.hidden2tag = nn.Linear(hidden_dim, output_dim)
def forward(self, text):
embeds = self.word_embeddings(text)
lstm_out, _ = self.lstm(embeds.view(len(text), 1, -1))
tag_space = self.hidden2tag(lstm_out.view(len(text), -1))
tag_scores = F.log_softmax(tag_space, dim=1)
return tag_scores
参数:
INPUT_DIM = 62288
EMBEDDING_DIM = 64
HIDDEN_DIM = 128
OUTPUT_DIM = 15
Pytorch 中的 LSTM 函数 returns 不只是最后一个时间步的输出而是所有输出(这在某些情况下很有用)。因此,在您的示例中,您似乎正好有 100 个时间步长(时间步长的数量就是您的序列长度)。
但是既然你在做分类,你只关心最后的输出。你通常可以这样得到它:
outputs, _ = self.lstm(embeddings)
# shape: batch_size x 100 x 15
output = outputs[:, -1]
# shape: batch_size x 1 x 15
这是一个15-classclass化模型,
OUTPUT_DIM = 15
。我正在尝试输入这样的频率向量'hi my name is' => [1,43,2,56]
。当我调用
predictions = model(x_train[0])
时,我得到一个大小为torch.Size([100, 15])
的数组,而不仅仅是一个包含 15 个 class 的一维数组,如下所示:torch.Size([15])
.发生了什么?为什么这是输出?我该如何解决?预先感谢您,更多信息如下。
模型(from main docs)如下:
import torch.nn as nn
class RNN(nn.Module):
def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim):
super().__init__()
self.word_embeddings = nn.Embedding(vocab_size, embedding_dim)
self.lstm = nn.LSTM(embedding_dim, hidden_dim)
self.hidden2tag = nn.Linear(hidden_dim, output_dim)
def forward(self, text):
embeds = self.word_embeddings(text)
lstm_out, _ = self.lstm(embeds.view(len(text), 1, -1))
tag_space = self.hidden2tag(lstm_out.view(len(text), -1))
tag_scores = F.log_softmax(tag_space, dim=1)
return tag_scores
参数:
INPUT_DIM = 62288
EMBEDDING_DIM = 64
HIDDEN_DIM = 128
OUTPUT_DIM = 15
Pytorch 中的 LSTM 函数 returns 不只是最后一个时间步的输出而是所有输出(这在某些情况下很有用)。因此,在您的示例中,您似乎正好有 100 个时间步长(时间步长的数量就是您的序列长度)。
但是既然你在做分类,你只关心最后的输出。你通常可以这样得到它:
outputs, _ = self.lstm(embeddings)
# shape: batch_size x 100 x 15
output = outputs[:, -1]
# shape: batch_size x 1 x 15