Image Captioning 解码器 LSTM Pytorch 的示例输入大小
Image Captioning Example input size of Decoder LSTM Pytorch
我是 Pytorch 的新手,我对图像字幕有疑问 example code。在 DcoderRNN class 中,lstm 定义为,
self.lstm = nn.LSTM(embed_size, hidden_size, num_layers, batch_first=True)
在正向函数中,
embeddings = self.embed(captions)
embeddings = torch.cat((features.unsqueeze(1), embeddings), 1)
我们首先嵌入字幕,然后将嵌入与来自 EncoderCNN 的上下文特征进行连接,但是连接增加了嵌入大小的大小,我们如何将其转发到 lstm?因为 lstm 的输入大小已经定义为 embed_size.
我是不是漏掉了什么?提前致谢。
您可以分析所有输入和输出张量的形状,然后您会更容易理解需要进行哪些更改。
假设:字幕 = B x S
其中 S
= 句子(字幕)长度。
embeddings = self.embed(captions)
现在,嵌入 = B x S x E
其中 E
= embed_size.
embeddings = torch.cat((features.unsqueeze(1), embeddings), 1)
此处,嵌入 = B x (S + 1) X E
。
我的理解是你在这里做错了。我猜你应该沿着 axis=2 连接特征。因为您可能想将图像特征与标题中每个词的词嵌入连接起来。所以,如果你这样做:
embeddings = torch.cat((features.unsqueeze(1), embeddings), 2)
结果是,embeddings = B X S X (E + F)
where E + F
= embed_size + img_feat_size
然后你需要修改你的 LSTM 定义如下。
self.lstm = nn.LSTM(embed_size+img_feat_size, hidden_size, num_layers, batch_first=True)
根据我的经验,通常人们会将图像特征与文字特征连接起来,然后将其传递给 LSTM 层。
我是 Pytorch 的新手,我对图像字幕有疑问 example code。在 DcoderRNN class 中,lstm 定义为,
self.lstm = nn.LSTM(embed_size, hidden_size, num_layers, batch_first=True)
在正向函数中,
embeddings = self.embed(captions)
embeddings = torch.cat((features.unsqueeze(1), embeddings), 1)
我们首先嵌入字幕,然后将嵌入与来自 EncoderCNN 的上下文特征进行连接,但是连接增加了嵌入大小的大小,我们如何将其转发到 lstm?因为 lstm 的输入大小已经定义为 embed_size.
我是不是漏掉了什么?提前致谢。
您可以分析所有输入和输出张量的形状,然后您会更容易理解需要进行哪些更改。
假设:字幕 = B x S
其中 S
= 句子(字幕)长度。
embeddings = self.embed(captions)
现在,嵌入 = B x S x E
其中 E
= embed_size.
embeddings = torch.cat((features.unsqueeze(1), embeddings), 1)
此处,嵌入 = B x (S + 1) X E
。
我的理解是你在这里做错了。我猜你应该沿着 axis=2 连接特征。因为您可能想将图像特征与标题中每个词的词嵌入连接起来。所以,如果你这样做:
embeddings = torch.cat((features.unsqueeze(1), embeddings), 2)
结果是,embeddings = B X S X (E + F)
where E + F
= embed_size + img_feat_size
然后你需要修改你的 LSTM 定义如下。
self.lstm = nn.LSTM(embed_size+img_feat_size, hidden_size, num_layers, batch_first=True)
根据我的经验,通常人们会将图像特征与文字特征连接起来,然后将其传递给 LSTM 层。