CNN网络的一些基本知识

CNN 网络的layer介绍

在卷积神经网络(Convolutional Neural Network,CNN)中,往往包含许多种不同的网络层交替组成,主要有卷积层(Convolutional Layer)、池化层(Pooling Layer)、非线性层(ReLU Layer)、全连接层(Fully Connected Layer)等。

  • 卷积层:卷积函数层, 主要对输入input进行卷积操作,同时根据参数stride的设置,确定卷积核每两次卷积操作直接滑动的距离。卷积核(kernel)类似一个图像滤波器(filter),每一个卷积核用一个矩阵表示,将其在图片上按照间隔大小滑动处理一遍得到的结果,即为卷积层的activation map(或feature map)

  •  ReLU(Rectified Linear Units) Layers:非线性层,主要目的是在系统中引入非线性特征。最常见的CNN网络中使用ReLU层,其具有比tanh和sigmoid函数更好的速度与效率;
    • researchers found out that ReLU layers work far better because the network is able to train a lot faster (because of the computational efficiency) without making a significant difference to the accuracy. It also helps to alleviate the vanishing gradient problem, which is the issue where the lower layers of the network train very slowly because the gradient decreases exponentially through the layers
  • Pooling Layers:池化层,也称降采样层,最常见的是maxpooling方法。Pooling层对输入矩阵的一块区域整体进行操作,只在该区域保留一个数值,而不同的pooling方法决定该数值的计算方法,maxpooling层对于一个区域输出最大值,同时还有average pooling和L2-norm pooling等方式。
    • this layer drastically reduces the spatial dimension (the length and the width change but not the depth) of the input volume. This serves two main purposes. The first is that the amount of parameters or weights is reduced by 75%, thus lessening the computation cost. The second is that it will control overfitting.
  • Fully Connected Layer:全连接层,一般位于CNN网络的最后部分,该层的输入可以是卷积层,ReLU层,Pooling层的结果,输出一个N维向量,N即为要识别的类别数。

  • Dropout layer:由大牛Hinton提出的Dropout Layers,是为了防止过度拟合问题出现,在训练时专门加入的层。该层在forward过程中随机drop out一系列的激活值,将其值改成0,减少过度拟合。

    • An important note is that this layer is only used during training, and not during test time.

  • backpropagation:“反向传播”,是一种在神经网络中常用的学习算法,用于计算梯度(gradient)以优化网络的权重和偏置,可以分为4个部分,the forward pass, the loss function, the backward pass, and the weight update.

  • backward pass:其目的是确定哪些权重对损失贡献最大,并找到调整这些权重的方法以便减少损失;

CNN 如何选取layer

cnn 卷积核大小、卷积层数、每层map个数都是如何确定下来的呢? 每一层卷积有多少channel数,以及一共有多少层卷积,这些暂时没有理论支撑。

一般通过经验,先用超参大模型训练,然后再在大模型上简化,最后取性能、精确度等综合的tradeoff.

经验模式:

  1. 小数据量,大模型训练;
  2. 设计合理的loss函数。一般来说分类就是Softmax, 回归就是L2的loss
  3. 观察loss的变化情况:NN主要的优化目标就是loss,所以观察loss比只观察准确率好
  4. 确认NN学习充分:比如分类,判断准确率会移动到极值附近;
  5. 设置合理的learn rate
  6. 对比训练集和测试集的loss

具体操作:

  1. 预处理:mean/std zero-center就够了, PCA, 白化什么的都用不上. 反正CNN能学习encoder;
  2. shuffle很重要;
  3. 理解网络原理
  4. dropout,可以防止过拟合
  5. 无脑用ReLU
  6. 无脑用3x3
  7. filter数量2^n
  8. 使用Xavier初始化网络,Xavier初始化的核心思想是使得每一层神经网络的激活值的方差在前向传播时保持恒定。这有助于解决梯度消失或爆炸的问题。
  9. 无脑用sgd + momentum.
  10. 要鼓励使用batch normalization.
  11. 你有95%概率不会使用超过40层的模型;
# 举一个filter数量是2^n的例子
        filters = [32, 64, 128]  # 这些是2的5次方,6次方,7次方
        
        self.conv_layers = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=filters[0], kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),
            
            nn.Conv2d(in_channels=filters[0], out_channels=filters[1], kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2),
            
            nn.Conv2d(in_channels=filters[1], out_channels=filters[2], kernel_size=3, stride=1, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2, stride=2)
        )

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值