- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我将 3 张灰度图像输入 CNN,其组合形状为 3、28、28。此过程将为每个图像生成多个特征图。我如何确定哪个特征图对应于特定图像。
这是一些代码-
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(256, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
print("Shape of x = ", x.shape)
x = self.pool(F.relu(self.conv2(x)))
print("Shape of x = ", x.shape)
x = torch.flatten(x, 1) # flatten all dimensions except batch
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
foo = torch.randn(3,1, 28, 28)
foo_cnn = net(foo)
例如,第一个卷积从 3 个图像生成 6 个特征图。有没有办法让我识别哪个特征图属于哪个图像,以便我可以对其执行一些操作。
最佳答案
为了区分哪个图像生成了哪些卷积特征图,必须将不同的输入图像拆分为批处理维度 (#images=#batches
),这样在应用任何卷积层时,它们是分别应用于每个图像,而不是不同输入图像的加权和,如果它们被分成 channel /深度维度,情况就是如此。
现在您不是将 3 张图像输入模型(在 pytorch 的眼中);这将要求输入的形状为:(3, 1, 28, 28)
对于灰度图像和 (3, 3, 28, 28)
对于 RGB 图像.你正在做的是(在某种意义上)将 3 个图像连接到深度维度,从而产生形状:(1, 3, 28, 28)
,因此 6 个输出特征图不能归因于特定图像(3 的加权组合,因为它们在深度维度上)。
因此,将输入 reshape 为 (3, 1, 28, 28)
并将 conv1
更改为 (1, 6, 5)
将导致以下输出:(3, 6, 12, 12)
因此,1st
批处理中的 1st
6 个特征图(输出的)对应于批处理中的第一张图像(输入的),2nd
6 个特征图对应于批处理中的 2nd
图像,依此类推。
关于pytorch - 如何在训练 CNN 时辨别哪个图像生成了特定的特征图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68968144/
我的数据中的某些项目的默认值等于None,并且某些默认值根本缺失。但似乎 pandas 在 None 和 NaN 之间没有太大区别,威胁它们全部为 NaN,这有点合乎逻辑,因为它们都不是数字,但我仍然
我是一名优秀的程序员,十分优秀!