卷积神经元网络CNN基础

简介: 卷积神经元网络CNN基础

0. 前言

按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。

本文是卷积神经元网络CNN的基础介绍。

1. CNN的基础介绍

卷积神经网络(Convolutional Neural Network, CNN)是一种专门设计用于处理具有类似网格结构数据(如图像、视频和序列数据)的深度学习模型。CNN最初是为计算机视觉任务而发展起来的,特别是在图像识别与分类方面取得了革命性的成功,并且在语音识别、自然语言处理以及许多其他领域中也得到了广泛应用。

CNN的核心特征包括:

  • 局部感受野(Local receptive fields): 卷积层中的每个神经元仅与其输入的一部分(如图像的一个小区域)相关联,这种结构模仿了生物视觉皮层中神经元的工作方式。通过应用可学习的滤波器(或称权重矩阵),CNN可以检测图像中的特定模式或特征,如边缘、角点等。
  • 权值共享(Weight sharing): 在同一层内,所有神经元使用的滤波器是相同的。这意味着在网络中只需要存储一组参数来描述一种特征,无论该特征出现在图像的哪个位置,都可以用同样的权重进行检测。这大大减少了模型参数的数量,并使得网络对平移具有不变性。
  • 卷积操作(Convolution Operation): 卷积神经网络的名字来源于其核心计算单元——卷积运算。这个过程涉及到滤波器在输入数据上滑动并执行元素级别的乘法和加法运算,生成一个特征图(Feature Map),反映了输入数据中特定特征的强度分布。

2. 常见CNN结构

2.1 卷积层(Convolution layer)
  • Filter(卷积核):实际上是一个矩阵,用每个Filter与基础图像做内积(内积,不是卷积)可以得到一个Feature Map
  • Degree of activation of a filer (卷积核的激活度): 对Feature Map中的值进行求和,用途是识别特点的特征(在Input有特定特征时,对应的filter求出的degree of activation会很大)
  • Stride(步长):Filter每次移动的距离

说明

x:有b张图片,3个通道(R,G,B),像素28*28

one k: 单一卷积核(对R,G,B 3个通道各有一个卷积核),3个通道,卷积核矩阵3✖3

multi-k:有多个卷积核(例如blur,sharp,edge等,识别不同特征)

bias:对应每个卷积核有一个偏置

关于卷积操作

一般要处理的彩色图像拥有不止一个通道,那对应的卷积核也不止一个通道,但是卷积计算出的结果只有一个通道。例如:像素为28*28的彩色图像有R,G,B三个通道,原始的数据张量即为(28,28,3),对应卷积核也应该有3个通道,例如(3,3,3)。但是卷积之后,每个通道对应同一位置的像素值会进行求合,所以卷积之后的结果为(26,26,1)

如果卷积核有多个,比如100个,卷积核张量大小为(3,3,3,100),这样卷积之后的结果为(26,26,100)

  • PyTorch代码:
import torch
layer = torch.nn.Conv2d(1,3,kernel_size=3,stride=1,padding=0)  #原图通道为1,卷积核有3个,卷积核大小为3*3,步长为1,补丁(原图扩展)为0
2.2 池化层(Max Pooling layer)
  • 对Feature Map进行压缩(对图像进行压缩,通过一定规则选择特定像素点,比如仅选择feature map中的最大值,以对feature map进行降维)
  • PyTorch代码:
layer = torch.nn.MaxPool2d(3,stride=2)   #卷积核大小为3*3,步长为1,选择feature map中最大值
2.3 Flatten layer
  • 在全链接层之前,需要把数据“压扁”成一维(后面全链接层就和普通的神经元网络一样了)
  • PyTorch中的调用方法为torch.nn.Flatten()
2.4 全链接层(Full connect layer)
  • 全连接层常位于CNN的最后阶段,它们将前面提取到的特征映射转换成固定长度的向量,以便进行分类或回归等最终预测任务。
  • PyTorch代码:
from torch import nn
linear_layer = nn.Linear(in_features=5, out_features=3)
2.5 金子塔结构
  • CNN的网络结构中的一种,每层识别的特征由简到繁。


相关文章
|
20天前
|
机器学习/深度学习 人工智能 自动驾驶
什么是人工智能领域的卷积神经网络
什么是人工智能领域的卷积神经网络
21 0
|
20天前
|
机器学习/深度学习 算法 计算机视觉
卷积神经网络中的卷积层,如何提取图片的特征?
卷积神经网络中的卷积层,如何提取图片的特征?
29 0
|
3天前
|
机器学习/深度学习 存储 监控
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
数据分享|Python卷积神经网络CNN身份识别图像处理在疫情防控下口罩识别、人脸识别
11 0
|
2天前
|
机器学习/深度学习 算法 TensorFlow
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
【视频】神经网络正则化方法防过拟合和R语言CNN分类手写数字图像数据MNIST|数据分享
|
11天前
|
机器学习/深度学习 数据采集 TensorFlow
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
29 0
|
17天前
|
机器学习/深度学习 自然语言处理 算法
|
1月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
61 2
|
2月前
|
机器学习/深度学习 编解码 PyTorch
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
|
1月前
|
机器学习/深度学习 算法 数据库
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
|
4月前
|
机器学习/深度学习
CNN卷积神经网络手写数字集实现对抗样本与对抗攻击实战(附源码)
CNN卷积神经网络手写数字集实现对抗样本与对抗攻击实战(附源码)
39 0