打印和查看功能如何在pytorch中工作?

时间:2018-04-13 02:35:27

标签: pytorch

这是我在网上找到的卷积神经网络

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(500, 50)
        self.fc2 = nn.Linear(50, 64)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 500)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x)

及其摘要

print(net)
Net(
  (conv1): Conv2d(3, 10, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(10, 20, kernel_size=(5, 5), stride=(1, 1))
  (conv2_drop): Dropout2d(p=0.5)
  (fc1): Linear(in_features=500, out_features=50, bias=True)
  (fc2): Linear(in_features=50, out_features=64, bias=True)
)

x.view的作用是什么?它与keras中的Flatten函数类似吗?另一个查询是重写pytorch如何打印模型的摘要。尽管该模型使用了两个退出nn.Dropout2d()F.dropout。打印模型时,我们只能看到一个(conv2_drop): Dropout2d(p=0.5),为什么?最后一个问题是为什么pytorch选择不打印F.max_pool2d图层?

1 个答案:

答案 0 :(得分:2)

1)x.view可以做的不仅仅是展平:它会在重塑维度时保留相同的数据。因此,使用x.view(batch_size, -1)将等同于Flatten

2)在nn.Module__repr__函数中,打印的元素是self._modules.items()中的子元素。

F.dropoutF.max_pool2d是函数,而不是nn.Module的子函数,因此它们不是图层,不会打印。但是,对于合并和退出,torch.nn中有一个模块,您已用于第一次退出。