我今天刚开始使用pytorch,目前正在阅读。 https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html。 文档中有此代码以及给出的插图。这些以某种方式相关吗?例如,这是给定代码的网络结构还是架构?
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 5x5 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
print(net)
CNN架构的链接:https://imgur.com/83UmBGc
答案 0 :(得分:0)
是的,图像中的网络由代码表示。在此,C1,C3,...表示卷积层,S2,S4,... max池层。所示的尺寸是穿过这些层中的每一层后的图像尺寸。您可以使用以下过程进行检查:
图像的输入尺寸是(1、32、32),对应于(通道,高度,宽度)。通过C1:Conv2d(1, 6, 5)
后,尺寸将为(6,28,28),可以通过公式output dim = (input_dim - filter_size + 2*padding)/stride + 1
找到。然后,通过S2:max_pool2d
,空间大小将减少一半,即尺寸将为(6,14,14)。同样,您可以检查其他尺寸并自己证明图像与代码相对应。
您可以检查CS231n reference以计算图像尺寸。