zoukankan      html  css  js  c++  java
  • pytorch中torch.nn构建神经网络的不同层的含义

    主要是参考这里,写的很好PyTorch 入门实战(四)——利用Torch.nn构建卷积神经网络

    1. 卷积层nn.Con2d()
      常用参数
    • in_channels:输入通道数
    • out_channels:输出通道数
    • kernel_size:滤波器(卷积核)大小,宽和高相等的卷积核可以用一个数字表示,例如kernel_size=3;否则用不同数字表示,例如kernel_size=(5,3)
    • stride : 表示滤波器滑动的步长
    • padding:是否进行零填充,padding=0表示四周不进行零填充,padding=1表示四周进行1个像素点的零填充
    • bias:默认为True,表示使用偏置

    举个例子,构建一个输入通道为3,输出通道为64,卷积核大小为3x3,四周进行1个像素点的零填充的conv1层:

    class testNet(nn.Module):
        def __init__(self, num_classes=10):
            super(testNet, self).__init__()
            #定义自己的网络
            self.conv1 = nn.Conv2d(3,64,kernel_size=3,padding=1)
     
        def forward(self,x):
            #定义自己的前向传播方式
            out = self.conv1(x)
            return out
    

    这里卷积层的输入维度应该是 (Batch, Number Channels, height, width).

    1. 池化层
      最大值池化nn.MaxPool2d()和均值池化nn.AvgPool2d()
      常用参数
      kernel_size、stride、padding在卷积层部分定义和这里一样

    举个例子,构建一个卷积核大小为2x2,步长为2的pool1层,并且加入到forward中:

    class testNet(nn.Module):
        def __init__(self, num_classes=10):
            super(testNet, self).__init__()
            #定义自己的网络
            self.conv1 = nn.Conv2d(3,64,kernel_size=3,padding=1)
            self.pool1 = nn.MaxPool2d(kernel_size=2,stride=2)
     
        def forward(self,x):
            #定义自己的前向传播方式
            out = self.conv1(x)
            out = self.pool1(out)
            return out
    

    事实上,池化层可以不必紧跟在卷积层之后,中间可以加入激活层和BatchNorm层,甚至可以在多个卷积操作后添加池化操作

    1. 批标准化层nn.BatchNorm2d()

    2. 激活函数nn.ReLU()

  • 相关阅读:
    10个值得我们关注的python博客
    Python获取并修改hosts
    详解python2 和 python3的区别
    Python监控网站运行状况
    用Flask实现视频数据流传输
    Python框架 Flask 项目实战教程
    使用Flask设计带认证token的RESTful API接口[翻译]
    使用python的Flask实现一个RESTful API服务器端[翻译]
    使用单用户模式破解Linux密码
    Linux软件的安装与卸载
  • 原文地址:https://www.cnblogs.com/lzida9223/p/10536186.html
Copyright © 2011-2022 走看看