Python深度学习之实现卷积神经网络
作者:刘润森! 发布时间:2021-08-11 01:57:01
一、卷积神经网络
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架构的完整概述
三、卷积
卷积是对名为f
和g
的两个函数的数学计算,得出第三个函数(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)
卷积有几个非常重要的概念:遮罩。
图中的黄色的部分的就是遮罩
四、卷积层
卷积层是CNN的核心构建块。CNN是具有一些卷积层和其他一些层的神经网络。卷积层具有几个进行卷积运算的过滤器。卷积层应用于二维输入,由于其出色的图像分类工作性能而非常著名。它们基于具有二维输入的小核k的离散卷积,并且该输入可以是另一个卷积层的输出。
五、在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减少了图像的空间大小,提供了更少的特征和参数以供进一步计算。
上图显示了带有步幅为2的2X2滤波器的MaxPool池化层。
在Keras中实现Max Pool层,如下所示:
model.add(MaxPooling2D(pool_size =(2,2)))
七、全连接层
全连接层是确定最终预测的所有输入和权重的总和,代表最后一个合并层的输出。它将一层中的每个神经元连接到另一层中的每个神经元
全连接层的主要职责是进行分类。它与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)
九、总结
卷积神经网络是一种特殊的多层神经网络,主要用于提取特征。CNN使用称为卷积和池化的两个操作将图像缩小为其基本特征,并使用这些特征适当地理解和分类图像
来源:https://blog.csdn.net/weixin_44510615/article/details/117409037


猜你喜欢
- 在上一篇文章中,我们介绍了如何使用源码对TensorBoard进行编译教程,没有定制需求的可以直接使用pip进行安装。TensorBoard
- 主要能兼容: PHP 5 一、chdir -- 改变目录 语法:bool chdir&nb
- 这篇文章主要介绍了python 图像处理画一个正弦函数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 引入在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对
- :is 动态组件使用 v-bind:is=”组件名”,会自动去找匹配的组件名,如果没有,则不显示;<div id="app&
- Python 是由吉多·范罗苏姆(Guido Van Rossum)在 90 年代早期设计。 它是如今最常用的编程语言之一。它的语法简洁且优
- 前几天有一个需求,透视表中的年级这一列要按照一年级,二年级这样的序列进行排序,但是用过透视表的人都知道,透视表对中文的排序不是太理想,放弃p
- 一、集合的基本信息集合:集合是无序的,集合中的元素是唯一的,集合一般用于元组或者列表中的元素去重。格式:set1 = set()或a={值1
- 1. 首先介绍pip常用命令pip安装命令: pip install package_name pip升级命令:pip install –u
- 1、MFCC概述在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特
- 本文实例讲述了python获取一组汉字拼音首字母的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/env python
- 上文中,我们一起学习了手把手教你实现一个 Python 计时器。本文中,云朵君将和大家一起了解什么是上下文管理器 和 Python
- zipfilePython 中 zipfile 模块提供了对 zip 压缩文件的一系列操作。f=zipfile.ZipFile(&
- 假如有个任务: 给定一个字符串,通过查询字典,来替换给定字符中的变量。如果使用通常的方法:>>> "This i
- 目录代码分享一、安装并创建Scrapy项目二、爬取应用市场评论过程1. Scrapy爬虫运行流程2. 页面分析页面分析过程一页面分析过程二页
- 报错信息:Job for mysqld.service failed because the control process exited
- python中字符串内置方法很多,可以通过dir()方式查看具体有哪些方法,下表是python字符串的全部的内置方法方法名描述capital
- 接触了一下docker和k8s,感觉是非常不错的东西。能够方便的部署线上环境,而且还能够更好的利用机器的资源,感觉是以后的大趋势。最近刚好有
- 本来想着做一个将图片识别为文字的小功能,本想到Google上面第一页全是各种收费平台的广告。这些平台提供的基本都是让我们通过调用相关的三方接
- Book表的数据显示id title price publish_id2 Linux &nb