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
猜你喜欢
- 本文主要介绍我在利用Django写文章时,采用的注册方法。首先说一下整体逻辑思路:•处理用户注册数据,•产生token,生成验证URL,•发
- 单例模式单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保 某一个类只有一个实例存在 。当希望在
- Python编写一个简易银行账户系统,供大家参考,具体内容如下文章中主要涉及的方法是Python中的open(filename, ‘r
- 本文实例为大家分享了python tkinter实现屏保程序的具体代码,供大家参考,具体内容如下该脚本摘录自:2014年辛星tkinter教
- 内容摘要:本文介绍了使用asp来JMail v4.3发信的大部分常用方法,包括邮件基本信息、身份验证、附件等。无需很多的修改就可以
- 井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要
- 前言众所周知Python不像JS或者PHP这种弱类型语言里在字符串连接时会自动转换类型,如果直接将字符串和数字拼接会直接报错。如以下的代码:
- 前言首先简单说一下虚拟环境的概念。虚拟环境是由基础环境创建而出,用于独有项目的开发,每个项目都应该有一个独有的环境。第一步检查是否安装Pyt
- 不用切图,只要设置基本的 图片及其属性即可!用鼠标右键控制图片翻转!<style>*{ FONT-SIZE: 12px; }se
- 这篇文章主要介绍了如何使用Python多线程测试并发漏洞,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 这篇文章主要介绍了Python测试线程应用程序过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 如下所示:import numpynew_list = [i for i in range(9)]numpy.array(new_list)
- python对XML文件的操作1、xml 创建import xml.etree.ElementTree as ETnew_xml=ET.El
- python 如何实现Excel 的Vlookup功能1、Excel 中VLOOKUP具体步骤Excel 中的VLOOKUP使用说明采用下面
- 我就废话不多说了,直接上代码吧!#-*- encoding:utf-8 -*-'''python 绘制颜色直方图
- 本文实例讲述了python实现对一个完整url进行分割的方法。分享给大家供大家参考。具体分析如下:python对一个完整的url进行分割,将
- 偶然发现linux系统附带的一个数独游戏,打开玩了几把。无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了。于是就打算借助计算机的强
- 这篇文章主要介绍了python使用配置文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 今天发现了一个显示ORACLE语法的好网站。内容太多,就不一一摘录了,记在这里,也方便自己查找。http://ss64.com/ora/ 目
- li {list-style-image: url(images/disc.gif);}li的这个样式定义是将列表项目使用图片来代替显示的小