什么是wap网站,东山县城乡规划建设局网站,企业邮箱地址怎么填,wordpress代码恢复旧编辑器☁️主页 Nowl
#x1f525;专栏《机器学习实战》 《机器学习》
#x1f4d1;君子坐而论道#xff0c;少年起而行之 文章目录
介绍
CNN的主要结构
卷积层
激励层
池化层
Kears搭建CNN
搭建代码
直观感受卷积的作用
结语 介绍 卷积神经网络#xff08;Convol…
☁️主页 Nowl
专栏《机器学习实战》 《机器学习》
君子坐而论道少年起而行之 文章目录
介绍
CNN的主要结构
卷积层
激励层
池化层
Kears搭建CNN
搭建代码
直观感受卷积的作用
结语 介绍 卷积神经网络Convolutional Neural NetworkCNN是一种深度学习模型主要用于处理和识别具有网格结构的数据如图像和视频。CNN在计算机视觉领域取得了巨大的成功广泛应用于图像分类、目标检测、人脸识别等任务。 CNN的主要结构 CNN的主要结构其实就三个部分卷积层激励层池化层我们接下来主要介绍这三个部分 卷积层 卷积层中核心的东西叫做滤波器他是一个有形状的矩阵滤波器的作用是提取图片的特征我们可以设置滤波器的数量不同滤波器得到的图片包含图片的不同特征
这张图显示了一个滤波器的某时刻的运作过程最左边的是原图中间是滤波器最右边是结果它会进行一个内积运算图中也展示了这个过程
我们可以这样思考不同的滤波器与图片进行的内积结果不同如果是一个提取轮廓的滤波器我们可以理解原图中的轮廓特征经过滤波后会得到保留而背景特征等信息就会逐渐消失
激励层
其实激励层不算一个层它是作为卷积层的激活函数它有以下几个优点 非线性变换 ReLU 引入了非线性变换使得 CNN 能够学习更复杂的函数和特征。线性变换的叠加仍然是线性的而引入非线性激活函数如 ReLU 可以打破这种线性性使得网络更有能力逼近复杂的函数。 稀疏激活性 ReLU 对于正数的输入直接输出而对于负数的输入则输出零。这种性质使得神经网络中的许多神经元变得非常稀疏只有在输入为正数时才被激活。这有助于减少模型的参数数量提高计算效率并减轻过拟合的风险。 特征的稀疏性 ReLU 可以帮助网络更加稀疏地表示学到的特征。通过将负数的激活设为零ReLU 有助于将不重要的特征过滤掉保留对任务有贡献的特征。 解决梯度消失问题 相较于一些传统的激活函数如 sigmoid 和 tanhReLU 更容易处理梯度消失的问题。在反向传播过程中ReLU 的梯度对于正数输入是常数而对于负数输入是零这有助于在深层网络中更好地传递梯度避免梯度消失的问题。
池化层 池化层简而言之是用来降低特征图尺寸保留重要特征的提取区域就是池化层的大小主要的池化层有两种平均池化与最大池化 平均池化
顾名思义平均池化就是取区域中的平均值
这幅图中池化层的大小是2x2
最大池化
最大池化就是取区域中的最大值
这幅图中池化层的大小也是2x2
Kears搭建CNN
搭建代码
以下是使用Keras搭建CNN的代码 # 导入必要的库
from keras.layers import Conv2D, MaxPooling2D
from keras.models import Sequential# 构建一个简单的卷积神经网络模型
model Sequential()
model.add(Conv2D(32, (3, 3), activationrelu, input_shape(224, 224, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activationrelu))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activationrelu))
model.add(MaxPooling2D((2, 2))) 先导入Keras中的库接着构建神经网络Conv2D构建了一个卷积层有32个滤波器每个滤波器的大小是33MaxPooling2D代表使用最大池化层池化层大小为22
直观感受卷积的作用
在这一部分我们通过可视化来直观感受一下卷积神经网络的作用
1.图片导入与处理 # 加载一张彩色图像
image_path hou.jpg
img load_img(image_path, target_size(224, 224))
img_array img_to_array(img)
img_array img_array / 255.0 # 归一化# 将图片扩展维度以符合模型的输入要求
img_array np.expand_dims(img_array, axis0) 导入图片将图片格式转化为224x224获取图片矩阵归一化 归一化不会改变原本的图像像素比例目的是使模型训练过程中更容易收敛拓展维度以适应Keras模型的输入要求
2.构建网络 # 构建一个简单的卷积神经网络模型
model Sequential()
model.add(Conv2D(32, (3, 3), activationrelu, input_shape(224, 224, 3), paddingsame))
model.add(MaxPooling2D((2, 2))) 我们这里就构建一层卷积层池化层正常任务中应该多一点我们先仅了解卷积的作用
3.可视化 # 创建一个新的模型只包含卷积层部分
convolution_model Model(inputsmodel.input, outputsmodel.layers[-1].output)# 获取卷积层的输出
conv_output convolution_model.predict(img_array)print(conv_output.shape)# 可视化卷积层输出的多个特征图
for i in range(12):plt.subplot(4, 3, i1)plt.imshow(conv_output[0, :, :, i], cmapviridis)plt.axis(off)
plt.show() 经过卷积后我们得到32张图片有32个滤波器我们展示前12张
得到以下图片
可以看到得到了图片的不同特征边缘纹理光照形状轮廓等经过多层卷积这些特征会更加显著
4.完整代码
这一部分我们搭建三层卷积层的完整代码再看看效果 import numpy as np
from keras.models import Model
from keras.preprocessing.image import load_img, img_to_array
from keras.layers import Conv2D, MaxPooling2D
from keras.models import Sequential
import matplotlib.pyplot as plt# 构建一个简单的卷积神经网络模型
model Sequential()
model.add(Conv2D(32, (3, 3), activationrelu, input_shape(224, 224, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activationrelu))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activationrelu))
model.add(MaxPooling2D((2, 2)))# 加载一张彩色图像
image_path hou.jpg
img load_img(image_path, target_size(224, 224))
img_array img_to_array(img)
img_array img_array / 255.0 # 归一化# 将图片扩展维度以符合模型的输入要求
img_array np.expand_dims(img_array, axis0)# 创建一个新的模型只包含卷积层部分
convolution_model Model(inputsmodel.input, outputsmodel.layers[-1].output)# 获取卷积层的输出
conv_output convolution_model.predict(img_array)print(conv_output.shape)# 可视化卷积层输出的多个特征图
for i in range(12):plt.subplot(4, 3, i1)plt.imshow(conv_output[0, :, :, i], cmapviridis)plt.axis(off)
plt.show()
可以看到不同的特征更加的显著无关特征逐渐消失这样模型能更好地学习到不同的特征以进行图像识别等任务
结语
卷积神经网络主要用来处理图像视频等因为它有提取特征的作用一般通过改变层的数量滤波器个数池化层形状等参数调整神经网络的性能
感谢阅读觉得有用的话就订阅下本专栏吧