Yann LeCun 和Yoshua Bengio在1995年引入了卷积神经网络,也称为卷积网络或CNN。CNN是一种特殊的多层神经网络,用于处理具有明显网格状拓扑的数据。其网络的基础基于称为卷积的数学运算。
卷积神经网络(CNN)的类型
以下是一些不同类型的CNN:
以下是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'))
上面的代码实现说明:
接下来,使用不同的参数值构建一个卷积层,如下所示
池化层它的功能是减少参数的数量,并减小网络中的空间大小。我们可以通过两种方式实现池化:
上图显示了带有步幅为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()
使用以下参数添加卷积层:
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深度学习之实现卷积神经网络的文章就介绍到这了,更多相关Python实现卷积神经网络内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!