【发布时间】:2021-04-24 17:51:52
【问题描述】:
我有一个编码器,它输出一个形状为(bn, c * k, 32, 32) 的张量。我现在想要生成形状为(bn, k, 1, 2) 的 k 均值。所以手段是二维坐标。为此,我想使用 k 个 FC 层,而对于每个均值 k_i 我只想使用 c 个通道。
所以我的想法是,我将编码器输出 out 重塑为形状为 (bn, k, c, 32, 32) 的 5d 张量。然后我可以使用扁平化的 out[:, 0] ... out[:, k] 作为 k 个线性层的输入。
简单的解决方案是手动定义线性层:
self.fc0 = nn.Linear(c * 32 * 32, 2)
...
self.fck = nn.Linear(c * 32 * 32, 2)
然后我可以如下定义每个均值的前向传播:
mean_0 = self.fc0(out[:, 0].reshape(bn, -1))
...
mean_k = self.fck(out[:, k].reshape(bn, -1))
有没有更有效的方法来做到这一点?
【问题讨论】:
-
不太确定,但你不能使用跨步卷积来做到这一点吗?
-
我不认为这就是我想要的。提供更多关于背景的信息:我想找到输入图像的关键点/地标。这个想法是,我为每个关键点 k 分配了一些特征图 c。这就是为什么编码器的输出具有
(bn, k, c, 32, 32)的形状。现在我想要那些 c 特征图来预测它的关键点,这是一个 2-dim 坐标。本质上,我希望每个关键点都有一个单独的 fc 层。
标签: python deep-learning neural-network pytorch