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程序的执行原理
Apr 11 Python
Python入门教程之if语句的用法
May 14 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
在Django中创建第一个静态视图
Jul 15 Python
浅谈Python数据类型之间的转换
Jun 08 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
python队列Queue的详解
May 10 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
python中有函数重载吗
May 28 Python
Python如何定义有可选参数的元类
Jul 31 Python
django项目中使用云片网发送短信验证码的实现
Jan 19 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入门学习知识点二 PHP简单的分页过程与原理
2011/07/14 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
jquery获取复选框被选中的值
2014/04/10 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
Python 中 Meta Classes详解
2016/02/13 Python
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
python中常用的九种预处理方法分享
2016/09/11 Python
python之django母板页面的使用
2018/07/03 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
古汉语文学求职信范文
2014/03/16 职场文书
党组织公开承诺书
2014/03/29 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python