Python深度学习之实现卷积神经网络


Posted in Python onJune 05, 2021

一、卷积神经网络

Yann LeCun 和Yoshua Bengio在1995年引入了卷积神经网络,也称为卷积网络或CNN。CNN是一种特殊的多层神经网络,用于处理具有明显网格状拓扑的数据。其网络的基础基于称为卷积的数学运算。

卷积神经网络(CNN)的类型

以下是一些不同类型的CNN:

  • 1D CNN:1D CNN 的输入和输出数据是二维的。一维CNN大多用于时间序列。
  • 2D CNNN:2D CNN的输入和输出数据是三维的。我们通常将其用于图像数据问题。
  • 3D CNNN:3D CNN的输入和输出数据是四维的。一般在3D图像上使用3D CNN,例如MRI(磁共振成像),CT扫描(甲CT扫描或计算机断层扫描(以前称为计算机轴向断层或CAT扫描)是一种医学成像 技术中使用的放射学获得用于非侵入性详述的身体的图像诊断的目的)和其他复杂应用程序的DICOM图像(医学数字成像)

二、网络架构

以下是CNN中不同层的网络架构:

  • 卷积层
  • 池化层
  • 全连接层

CNN架构的完整概述

Python深度学习之实现卷积神经网络

三、卷积

卷积是对名为fg的两个函数的数学计算,得出第三个函数(f * g)。第三个功能揭示了一个形状如何被另一个形状修改。其数学公式如下:

h ( x , y ) = f ( x , y ) ∗ g ( x , y ) h(x,y)=f(x,y)*g(x,y) h(x,y)=f(x,y)∗g(x,y)

Python深度学习之实现卷积神经网络

卷积有几个非常重要的概念:遮罩。

Python深度学习之实现卷积神经网络

图中的黄色的部分的就是遮罩

四、卷积层

卷积层是CNN的核心构建块。CNN是具有一些卷积层和其他一些层的神经网络。卷积层具有几个进行卷积运算的过滤器。卷积层应用于二维输入,由于其出色的图像分类工作性能而非常著名。它们基于具有二维输入的小核k的离散卷积,并且该输入可以是另一个卷积层的输出。

Python深度学习之实现卷积神经网络

五、在Keras中构建卷积层

from keras.models import Sequential
from keras.layers.convolutional import Conv2D
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(32, 32, 3), padding='same', activation='relu'))

上面的代码实现说明:

  • 输出将具有32个特征图。
  • 内核大小将为3x3。
  • 输入形状为32x32,带有三个通道。
  • padding = same。这意味着需要相同尺寸的输出作为输入。
  • 激活指定激活函数。

接下来,使用不同的参数值构建一个卷积层,如下所示

六、池化层

池化层它的功能是减少参数的数量,并减小网络中的空间大小。我们可以通过两种方式实现池化:

  • Max Pooling:表示矩形邻域内的最大输出。Average Pooling:表示矩形邻域的平均输出
  • Max Pooling和Average Pooling减少了图像的空间大小,提供了更少的特征和参数以供进一步计算。

Python深度学习之实现卷积神经网络

上图显示了带有步幅为2的2X2滤波器的MaxPool池化层。

Python深度学习之实现卷积神经网络

在Keras中实现Max Pool层,如下所示:

model.add(MaxPooling2D(pool_size =(2,2)))

七、全连接层

全连接层是确定最终预测的所有输入和权重的总和,代表最后一个合并层的输出。它将一层中的每个神经元连接到另一层中的每个神经元

Python深度学习之实现卷积神经网络

全连接层的主要职责是进行分类。它与softmax激活函数一起使用以得到结果。

用于多类的激活函数是softmax函数,该函数以0和1(总计为1)的概率对完全连接的层进行规范化。

带有非线性函数“ Softmax”的Keras代码如下:

model.add(Dense(10, activation='softmax'))

八、Python实现卷积神经网络

环境Google Colab

导入所有必需的库

import numpy as np
import pandas as pd
from keras.optimizers import SGD
from keras.datasets import cifar10
from keras.models import Sequential
from keras.utils import np_utils as utils
from keras.layers import Dropout, Dense, Flatten
from keras.layers.convolutional import Conv2D, MaxPooling2D

加载cifar10数据:

(X, y), (X_test, y_test) = cifar10.load_data()
# 规范化数据
X,X_test = X.astype('float32')/ 255.0,X_test.astype('float32')/ 255.0

转换为分类:

y,y_test = utils.to_categorical(y,10),u.to_categorical(y_test,10)

初始化模型:

model = Sequential()

使用以下参数添加卷积层:

  • Features map = 32
  • 内核大小= 3x3
  • 输入形状= 32x32
  • Channels = 3
  • Padding = 3→表示与输入相同的尺寸输出
model.add(Conv2D(32, (3, 3), input_shape=(32, 32, 3), padding='same', activation='relu'))
# Dropout
model.add(Dropout(0.2))
# 添加另一个卷积层 padding ='valid'表示输出尺寸可以采用任何形式
model.add(Conv2D(32,(3,3),activation ='relu',padding ='valid'))
# 添加一个最大池化层
model.add(MaxPooling2D(pool_size =(2,2)))
# 展平
model.add(Flatten())
# Dense层 隐藏单元数为521
model.add(Dense(512, activation='relu'))
# Dropout
model.add(Dropout(0.3))
#output 
model.add(Dense(10, activation='softmax'))
# 编译模型 激活器选择SGD
model.compile(loss='categorical_crossentropy',             optimizer=SGD(momentum=0.5, decay=0.0004), metrics=['accuracy'])

25个epochs

model.fit(X, y, validation_data=(X_test, y_test), epochs=25,          batch_size=512)

Python深度学习之实现卷积神经网络

九、总结

卷积神经网络是一种特殊的多层神经网络,主要用于提取特征。CNN使用称为卷积和池化的两个操作将图像缩小为其基本特征,并使用这些特征适当地理解和分类图像

到此这篇关于Python深度学习之实现卷积神经网络的文章就介绍到这了,更多相关Python实现卷积神经网络内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中的jquery PyQuery库使用小结
May 13 Python
在Python的循环体中使用else语句的方法
Mar 30 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
PyQt5实现登录页面
May 30 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
高考考python编程是真的吗
Jul 20 Python
一文搞懂Python Sklearn库使用
Aug 23 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 Python
python opencv通过4坐标剪裁图片
Jun 05 #Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 #Python
拒绝盗图!教你怎么用python给图片加水印
python四个坐标点对图片区域最小外接矩形进行裁剪
Python OpenCV 图像平移的实现示例
Python包argparse模块常用方法
Jun 04 #Python
opencv读取视频并保存图像的方法
You might like
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
validator验证控件使用代码
2010/11/23 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
快速搭建React的环境步骤详解
2017/11/06 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
微信小程序自定义轮播图
2018/11/04 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
2019/09/24 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
python之yield表达式学习
2014/09/02 Python
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
python中字典(Dictionary)用法实例详解
2015/05/30 Python
深入浅析python定时杀进程
2016/06/06 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
EJB实例的生命周期
2016/10/28 面试题
大学四年规划书范文
2013/12/27 职场文书
小学一年级学生评语
2014/04/22 职场文书
高考标语大全
2014/06/05 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android