这篇文章主要介绍了Python中如何实现卷积神经网络,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
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的离散卷积,并且该输入可以是另一个卷积层的输出。
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'))
环境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使用称为卷积和池化的两个操作将图像缩小为其基本特征,并使用这些特征适当地理解和分类图像
感谢你能够认真阅读完这篇文章,希望小编分享的“Python中如何实现卷积神经网络”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。