卷积神经网络CNN

本文介绍了图像的基本概念,包括像素值范围和彩色图的组成。重点阐述了卷积神经网络(CNN)的结构,特别是卷积层、池化层的功能和计算原理,以及使用Python库如PyTorch的代码示例。
摘要由CSDN通过智能技术生成

图像基础知识

图像是由像素点组成的,每个像素点的取值范围为 : [0, 255] 。像素值越接近于 0 ,颜色越暗,接近于黑色;像素值越接 近于255 ,颜色越亮,接近于白色。
在深度学习中,我们使用的图像大多是彩色图,彩色图由 RGB3 个通道组成,如下图所示

import numpy as np
import matplotlib.pyplot as plt

# 黑
z = np.zeros([200,200,3])
plt.imshow(z)
plt.show()

# 白
w = np.full([200,200,3],255)
plt.imshow(w)
plt.show()

# 美女图片
img = plt.imread('data/img.jpg')
print(img.shape)
plt.imshow(img)
plt.show()

                     

 CNN概述

卷积神经网络(Convolutional Neural Network)是含有卷积层的神经网络. 卷积层的作用就是用来自动学习、提取图 像的特征.
CNN网络主要由三部分构成:卷积层、池化层和全连接层构成:
1. 卷积层负责提取图像中的局部特征;
2. 池化层用来大幅降低参数量级(降维);
3. 全连接层用来输出想要的结果。

卷积层

卷积计算

1. input 表示输入的图像
2. filter 表示卷积核 , 也叫做卷积核 ( 滤波矩阵 )
3. input 经过 filter 得到输出为最右侧的图像,该图叫做特征图
卷积运算本质上就是在卷积核和输入数据的局部区域间做点积。

Padding

通过上面的卷积计算过程,最终的特征图比原始图像小很多,如果想要保持经过卷积后的图像大小不变, 可以在原图周围添加 padding 来实现.

Stride

多通道卷积计算 

 特征图大小

输出特征图的大小与以下参数息息相关 :
1. size: 卷积核 / 过滤器大小,一般会选择为奇数,比如有 1*1 3*3 5*5
2. Padding: 零填充的方式
3. Stride: 步长
那计算方法如下图所示 :
1. 输入图像大小 : W x W
2. 卷积核大小 : F x F
3. Stride: S
4. Padding: P
5. 输出图像大小 : N x N

代码示例

import torch
import torch.nn as nn
import matplotlib.pyplot as plt

img = plt.imread('data/img.jpg')
print(img.shape)

# 卷积层
"""
参数说明:
in_channels: 输入通道数,
out_channels: 输出通道,也可以理解为卷积核kernel的数量
kernel_size:卷积核的高和宽设置,一般为3,5,7...
stride:卷积核移动的步长
padding:在四周加入padding的数量,默认补0
"""
layer = nn.Conv2d(in_channels=3,out_channels=10,kernel_size=3,stride=2,padding=0)

# 图片为维度交换位置 增加维度
img = torch.tensor(img).permute(2,0,1).unsqueeze(0)
# 转换类型
fm = layer(img.type(torch.float32))
print(fm.shape)

池化层

池化计算

池化层 (Pooling) 降低维度 , 缩减模型大小,提高计算速度

​​​Stride

Padding

多通道池化层计算

代码示例

import torch
import torch.nn as nn

torch.random.manual_seed(10)
# 数据             多通道池化改 size
input = torch.randint(0,10,size=(3,3,3),dtype=torch.float32)
print(input)

# 最大池化
mpool = nn.MaxPool2d(kernel_size=2,stride=1,padding=0)
outputs = mpool(input)
print(outputs)

# 平均池化
mpool = nn.AvgPool2d(kernel_size=2,stride=1,padding=0)
outputs = mpool(input)
print(outputs)

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值