我们如何在 PyTorch 中将线性层的输出提供给 Conv2D?
Posted
技术标签:
【中文标题】我们如何在 PyTorch 中将线性层的输出提供给 Conv2D?【英文标题】:How can we provide the output of a Linear layer to a Conv2D in PyTorch? 【发布时间】:2020-07-26 10:16:47 【问题描述】:我正在构建一个自动编码器,我需要将图像编码为长度为 100 的潜在表示。我正在为我的模型使用以下架构。
self.conv1 = nn.Conv2d(in_channels = 3, out_channels = 32, kernel_size=3)
self.conv2 = nn.Conv2d(in_channels=32,out_channels=64,kernel_size=3,stride=2)
self.conv3 = nn.Conv2d(in_channels=64,out_channels=128,kernel_size=3,stride=2)
self.linear = nn.Linear(in_features=128*30*30,out_features=100)
self.conv1_transpose = nn.ConvTranspose2d(in_channels=128,out_channels=64,kernel_size=3,stride=2,output_padding=1)
self.conv2_transpose = nn.ConvTranspose2d(in_channels=64,out_channels=32,kernel_size=3,stride=2,output_padding=1)
self.conv3_transpose = nn.ConvTranspose2d(in_channels=32,out_channels=3,kernel_size=3,stride=1)
有什么方法可以将Linear
层的输出提供给Conv2D
或ConvTranspose2D
层,以便重建图像?如果我删除 Linear
层,输出将恢复。我想知道如何重建图像并保留Linear
层
任何帮助将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:你可以使用另一个线性层:
self.linear2 = nn.Linear(in_features=100, out_features=128*30*30)
然后将输出重塑为 3D 体积并将其传递到您的反卷积层。
【讨论】:
非常感谢!我不敢相信我没有想到这个想法 但是,尽管输出形状具有所需的输出,但我在训练时仍然遇到错误。RuntimeError: shape '[8, 115200]' is invalid for input of size 2113536
。你能看看这里的代码吗 - colab.research.google.com/drive/…
这很奇怪,我尝试了你的代码,它在第一个反卷积层之后返回了正确的暗淡。我有一个张量 torch.Size([n=2, 64, 62, 62])
您好,感谢您的帮助。尽管已经定义了它们,但我实际上忘记在我的 DataLoader 中实际应用我的转换它现在可以正常工作了。以上是关于我们如何在 PyTorch 中将线性层的输出提供给 Conv2D?的主要内容,如果未能解决你的问题,请参考以下文章
在 pytorch 中通过具有线性输出层的 RNN 发送的填充批次的掩码和计算损失
如何正确地为 PyTorch 中的嵌入、LSTM 和线性层提供输入?