我开发了一个编码器(CNN)-解码器(RNN)网络,用于 pytorch 中的图像字幕。解码器网络接收两个输入——来自编码器的上下文特征向量和用于训练的字幕的词嵌入。上下文特征向量的大小 = embed_size
,这也是标题中每个单词的嵌入大小。我这里的问题更关心 Class DecoderRNN 的输出。请参考下面的代码。
class DecoderRNN(nn.Module):
def __init__(self, embed_size, hidden_size, vocab_size, num_layers=1):
super(DecoderRNN, self).__init__()
self.embed_size = embed_size
self.hidden_size = hidden_size
self.vocab_size = vocab_size
self.num_layers = num_layers
self.linear = nn.Linear(hidden_size, vocab_size)
self.embed = nn.Embedding(vocab_size, embed_size)
self.lstm = nn.LSTM(embed_size, hidden_size, num_layers, batch_first = True)
def forward(self, features, captions):
embeddings = self.embed(captions)
embeddings = torch.cat((features.unsqueeze(1), embeddings),1)
hiddens,_ = self.lstm(embeddings)
outputs = self.linear(hiddens)
return outputs
在前向函数中,我发送一个序列 (batch_size, caption_length+1, embed_size) (concatenated tensor of context feature vector and the embedded caption)。序列的输出应该是标题和形状 (batch_size, caption_length, vocab_size) ,但我仍然收到形状 (batch_size, caption_length +1, vocab_size) 的输出。谁能建议我应该在我的转发功能中改变什么,以便不接收额外的二维?提前致谢