在 Jeremy Howard 的本教程中:torch.nn 到底是什么?他最后有一个例子,他为 MNIST 创建了一个 CNN。在nn.Conv2d
中,他使in_channels
and out_channels
: (1,16), (16,16), (16,10)
。
我知道最后一个必须是 10,因为有 10 个班级,我们想要每个班级的“概率”。但是为什么要先升到 16 呢?你如何选择这个值?为什么不直接从 1 到 10、10 到 10 和 10 到 10?这与kernel_size
and有关系stride
吗?
所有的图像都是28x28
,所以我也看不到这些值和 16 之间的任何相关性。
class Mnist_CNN(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=2, padding=1)
self.conv2 = nn.Conv2d(16, 16, kernel_size=3, stride=2, padding=1)
self.conv3 = nn.Conv2d(16, 10, kernel_size=3, stride=2, padding=1)
def forward(self, xb):
xb = xb.view(-1, 1, 28, 28)
xb = F.relu(self.conv1(xb))
xb = F.relu(self.conv2(xb))
xb = F.relu(self.conv3(xb))
xb = F.avg_pool2d(xb, 4)
return xb.view(-1, xb.size(1))