2️卷积神经网络(CNN)

import torch.nn as nn

Class Net (nn.Module):

    def __init__(self):
        super().__init__()
        self.conv1=nn.Conv2d(1,6,3)      ## 输入1通道,输出6通道,卷积核3*3的的一个卷积层
        self.conv2=nn.Conv2d(6,16,5)     ## 输入6通道,输出16通道,卷积核3*3的的一个卷积层
 
    def forward(self, x):
        x=F.max_pool2d(F.relu(self.conv1(x)),2)    ## 激活函数:转为非线性,最大值池化:降维
        x=F.max_pool2d(F.relu(self.conv2(x)),2)
        return x

卷积(求点积)

  • 卷积过程:如下图,输入为5x5 蓝色矩阵, 卷积核或称为滤波器(深色)为3x3。

  • 将卷积核矩阵对应到输入矩阵左上角3x3的区域(感受野)。

  • 将卷积核矩阵中的每个值分别与输入矩阵内的值相乘,再叠加,最后得出1个值,作为输出值。

  • 移动卷积核1步(步长)

  • 再按上述方法,点积求和,作为第二个值,以此类推。

  • 步长为1,卷积后的矩阵边长尺寸:输入矩阵边长-卷积核边长+1 (5-3+1)

卷积核
点积求和

加偏置 bias

  • 生成 Feature map

使用激活函数ReLu

  • 将小于0的置为0

  • 生成新的 Feature map

ReLu Function

池化层 Pooling:降低维度(参数)

  • Max polling: 每个窗口内个元素,取最大值

  • Mean Pooling:平均值

  • Sum pooling:取和

展平

  • Flattening, 转成1维

flattening
Convolution structure

全链接(神经网络部分)

  • 将展平的值作为神经网络的输入层

  • 隐藏层,有ReLu

  • 输出层

激活函数(非线性)

  • Sigmoid: 输出为0-1之间的值,用于二分类。

  • SoftMax: 输出为0-1之间的值,总和为1, 用于多分类。

成本计算(训练部分)

  • 将输出的值(概率)放入损失函数, 得出结果越小越好。

  • 损失函数:Log loss function, MSE(不用)。

  • 通过训练,找出最佳。

    • 卷积部分的滤波器,偏置项

    • 神经网络部分的权重,偏置

优化器

  • SGD

  • Adam

Refences:

Last updated

Was this helpful?