深度学习/联邦学习笔记(六)卷积神经及相关案例+pytorch

本文深入探讨了卷积神经网络的基础知识与应用实践,包括卷积层、池化层及全连接层的工作原理,并提供了LeNet、AlexNet、VGGNet等多个经典网络的实现案例。

深度学习/联邦学习笔记(六)

卷积神经及相关案例+pytorch

卷积神经网络不同于一般的全连接神经网络,卷积神经网络是一个3D容量的神经元,即神经元是以三个维度来排列的:宽度、高度和深度

卷积神经网络中的主要层结构有三个:卷积层、池化层和全连接层,通过堆叠这些层结构形成了一个完整的卷积神经网络结构。卷积神经网络将原始图片转化成最后的类别得分,其中一些层包含参数,一些层没有包含参数,比如卷积层和全连接层拥有参数,而激活层和池化层不含参数。

构造一个简单的多层卷积神经网络

卷积层

nn. Conv2d()就是PyTorch中的卷积模块了,里面常用的参数有5个,分别是in_channels, out_ channels, kernel size, stride, padding, 除此之外还有参数dilation, groups, bias。 下 面来解释每个参数的含义。

in_channels对应的是输人数据体的深度; out_channels 表示输出数据体的深度; kernel_ size表示滤波器(卷积核)的大小,可以使用一个数字来表示高和宽相同的卷积核,比如kernel_ size=3, 也可以使用不同的数字来表示高和宽不同的卷积核,比如kernel_ size=(3, 2); stride表示滑动的步长; padding=0 表示四周不进行零填充,而padding=1表示四周进行1个像素点的零填充; bias是一一个布尔值,默认bias=True,表示使用偏置; groups表示输出数据体深度上和输人数据体深度上的联系,默认groups=1, 也就是所有的输出和输人都是相关联的,如果groups=2, 这表示输人的深度被分割成两份,输出的深度也被分割成两份,它们之间分别对应起来,所以要求输出和输人都必须要能被groups整除; dilation 表示卷积对于输人数据体的空间间隔,默认dilation1

池化层

nn.MaxPool2d()表示网络中的最大值池化,其中的参数有kernel_size、stride、padding. dilation. return_sindices. ceil_mode.下面解释一下它们各自的含义。

  •  kernel_ size, stride, padding,dilation之前卷积层已经介绍过了,是相同的含义;
  •  retun_indices表示是否返回最大值所处的下标默认return_indices=False
  • ceil_mode表示使用一些方格代替层结构,默认ceil_mode=False, 一般都不会设置这些参数。
  • nn. AvgPool2d()表示均值池化,里面的参数和nn.MaxPool2d() 类似,但多一个参数 count_ include_pad,这个参数表示计算均值的时候是否包含零填充,默认count_ include_pad=True。

一般使用较多的就是nn.MaxPool2d() 和nn .AvgPool2d(),另外PyTorch还提供了一些别的池化层,如nn. LPPcol2d()、nn .AdaptiveMaxPool2d()等
全连接层和激活函数上一章已经介绍过, 接下来构造一个简单的多层卷积神经网络。

from torch import nn


class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()  #b,3,32,32

        #将卷积层、激活层和池化层组合在一起构成了一个层结构,定义了3个这样的层结构
        layer1 = nn.Sequential()   #nn.Sequential()是将网络的层组合在一起
        layer1.add_module('conv1',nn.Conv2d(3,32,3,1,padding=1))     #nn.Conv2d()是pytorch中的卷积模块
        #b,32,32,32
        layer1.add_module('relu1', nn.ReLU(True))            #激活层
        layer1.add_module('pool1',nn.MaxPool2d(2,2)) #b, 32, 16, 16
        self.layerl = layer1

        layer2 = nn.Sequential()
        layer2.add_module('conv2', nn.Conv
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值