Pytorch之第一次构建神经网络(一)

本文为第一次构建神经网络系列第一篇

探讨如何构建神经网络中关键的class Net

系列第一篇:https://blog.csdn.net/qq_37385726/article/details/81740386

系列第二篇:https://blog.csdn.net/qq_37385726/article/details/81742247

系列第三篇:https://blog.csdn.net/qq_37385726/article/details/81744802

系列第四篇:https://blog.csdn.net/qq_37385726/article/details/81745510

系列第五篇:https://blog.csdn.net/qq_37385726/article/details/81748635

 

目录

代码

输出


本文根据https://blog.csdn.net/qq_37385726/article/details/81740233所述的前两种方法构建Net类,并打印网络结构

其中def是用于定义网络中的层结构,forward用于前向传递构建网络图

  • 卷积 Relu(rectify linear unit 用作非线性处理) Pooling(池化/亚采样)
  • #展平(关键操作,利用view函数实现,用于构建nn.Linear层的输入)# 

       关于view函数介绍请参见https://blog.csdn.net/qq_37385726/article/details/81738518

  • 全连接层
  • 输出

代码

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()

        #利用nn中的Con2d卷积层函数创建卷积层
        self.conv1 = nn.Conv2d( # 1*28*28 -> 32*28*28
            in_channels=1,
            out_channels=32,
            kernel_size=5,
            stride=1,
            padding=2
        )
        #经过relu()
        #jing经过pool()  32*28*28 -> 32*14*14
     #利用nn中的Sequential函数快速创建神经网络,每一个都没有姓名
        self.all = nn.Sequential(
            nn.Conv2d(32,64,5,1,2),    #32*14*14 -> 64*14*14
            nn.ReLU(),  #64*14*14 -> 64*14*14
            nn.MaxPool2d(kernel_size=2,stride=2) #64*14*14 -> 64*14*14
        )

        self.connect1 = nn.Linear(64*14*14,128)
        self.connect2 = nn.Linear(128,10)

    def forward(self,x):
        x = self.conv1(x)
        x = F.relu(x)
        x = F.max_pool2d(x)
        x = self.all(x)
#对于Linear层输入为线性,所以要将原来的64*14*14的input利用view函数展平成1维的64*14*14 tensor
        x = x.view(-1, self.num_flat_features(x))  
        x = self.connect1(x)
        x = F.relu(x)
        x = self.connect2(x)
        return x

     #计算x的有的数据个数,用于展平二维tensor
     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)  #打印网络结构

输出

Net(
  (conv1): Conv2d(1, 32, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
  (all): Sequential(
    (0): Conv2d(32, 64, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (1): ReLU()
    (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (connect1): Linear(in_features=12544, out_features=128, bias=True)
  (connect2): Linear(in_features=128, out_features=10, bias=True)
)

猜你喜欢

转载自blog.csdn.net/qq_37385726/article/details/81740386