原文链接:http://tecdat.cn/?p=26230
什么是 CNN
本文演示了如何训练一个简略的卷积神经网络 (CNN) 来对 CIFAR 图像进行分类。
Convolutional Neural Networks
(ConvNets 或 CNNs)是一类神经网络,已被证实在图像识别和分类等畛域十分无效。与传统的多层感知器架构不同,它应用两个称为 convolution
和 pooling
的操作将图像简化为其基本特征,并应用这些特色来了解和分类图像。
CNN 重要术语
卷积层
卷积是从输出图像中提取特色的第一层。卷积通过应用输出数据的小方块学习图像特色来保留像素之间的关系。这是一个数学运算,须要两个输出,例如 image matrix
和 filter
或 kernel
。而后图像矩阵的卷积乘以过滤器矩阵,称为 Feature Map
。
应用不同滤波器对图像进行卷积能够通过利用滤波器来执行边缘检测、含糊和锐化等操作。
激活函数
因为卷积是线性操作,图像远非线性,非线性层通常间接放在卷积层之后,以引入 nonlinearity
激活图。
有几种类型的非线性操作,风行的是:
Sigmoid
: sigmoid 非线性具备数学模式 f(x) = 1 / 1 + exp(-x)。它取一个实数值并将其标准化到 0 到 1 之间的范畴内。
Tanh
: Tanh 将实数值压缩到 [-1, 1] 范畴内。
ReLU
: 线性单元 (ReLU) 计算函数 ƒ(κ)=max (0,κ)。
Leaky ReL
:Leaky ReLU 函数只不过是 ReLU 函数的改良版本。Leaky ReLU 就是为了解决这个问题而定义的。
Maxout
:Maxout 激活是 ReLU 和 leaky ReLU 函数的泛化。
ELU
:Exponential Linear Unit
或简称 ELU,也是 Rectiufied Linear Unit (ReLU)的一种变体。与 leaky relu 和 parametric ReLU 函数不同,ELU 不是直线,而是应用对数曲线来定义负值。
过滤器 | 核大小 | 过滤器数量
卷积应用 a 从输出图像 kernel
中提取某些 特色内容。核是一个矩阵,它 slide
逾越图像并与输出相乘,从而以某种现实的形式加强输入。
在咱们深入研究之前,核是一个权重矩阵,它与输出相乘以提取相干特色。核矩阵的维度是卷积的名称。例如,在 中 2D convolutions
,核矩阵是 2D matrix
。
一个一般的卷积层实际上由多个这样的过滤器组成。
步长
在输出矩阵上挪动的像素数。当步长为 1 时,咱们一次将过滤器挪动到 1 个像素。当步长为 2 时,咱们一次将过滤器挪动到 2 个像素,依此类推。下图显示卷积将以 1 的步长工作。
填充
padding
意味着在数据的边界处提供额定的像素。有时过滤器不能齐全适宜输出图像,那么咱们将应用填充。
咱们有两个抉择:
- 用零填充图片(零填充),使其适宜
- 删除过滤器不适宜的图像局部。这称为无效填充,它只保留图像的无效局部。
池化层
A pooling layer
是在卷积层之后增加的新层。具体来说,在对卷积层输入的特色图利用非线性(例如 ReLU)之后;
当图像太大时,池化层局部会缩小参数的数量。Spatial pooling
也称为 subsampling
或 downsampling
缩小每个地图的维数但保留重要信息。
空间池能够有不同的类型:
- 最大池化
- 均匀池化
Max pooling
从校对后的特色图中取最大元素。计算特色图上每个补丁的平均值称为 average pooling
。特色图调用中每个补丁的所有元素的总和为 sum pooling
.
扁平化和密集层
Flattening
正在将数据转换为一维数组以将其输出到下一层。咱们展平卷积层的输入以创立单个长特征向量。
Fully connected layer
:传统的多层感知器构造。它的输出是一个一维向量,示意前几层的输入。它的输入是附在图像上的不同可能标签的概率列表(例如狗、猫、鸟)。接管概率最高的标签是分类决策。
下载数据和模型构建
该 CIFAR10
数据集蕴含 60,000 张彩色图像 10 classes
,每个类别有 6,000 张图像。数据集分为 50,000 张训练图像和 10,000 张测试图像。这些类是互斥的,它们之间没有重叠。
X\_train = X\_train/255
X\_test = X\_test/255
X\_train.shape, X\_test.shape
验证数据
为了验证数据集看起来是否正确,让咱们绘制测试集中的第一张图像并显示图像。
plt.imshow(X_test\[0\])
y_test
构建 CNN 模型
上面的 8 行代码应用一个通用模式定义了卷积基:一堆 Conv2D
、MaxPooling2D
、Dropout
和Flatten
层 Dense
。
作为输出,a Conv2D
采纳形态 (image\_height, image\_width, color_channels) 的张量。
Maxpool2D()
通过对沿特色轴的每个维度在 (2,2)Downsamples
定义的窗口上取最大值来对输出示意进行 分层。
Dropout
() 用于在训练阶段的每次更新时将暗藏单元的出边随机设置为 0。
Flatten()
用于将数据转换为一维数组,用于输出到下一层。
Dense()
层是具备 128 个神经元的惯例深度连贯神经网络层。输入层也是一个密集层,有 10 个神经元用于 10 个类。
应用的激活函数是 softmax
。Softmax 将实数向量转换为分类概率向量。输入向量的元素在 (0, 1) 范畴内并且总和为 1。
model.add(Flatten())
model.add(Dense(units = 128, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
model.summary()
编译和训练模型
这是 compiling
模型和 fitting
训练数据。咱们将应用 10 epochs
来训练模型。一个期间是对所提供的整个数据的迭代。是在每个 epoch 完结时 validation_data
评估和任何模型指标的 数据。loss
模型不会依据这些数据进行训练。因为指标 = ['sparse_categorical_accuracy']
模型将基于 accuracy
.
history = model.fit(X_train
咱们当初将绘制 model accuracy
and model loss
。在模型准确度中,咱们将绘制训练准确度和验证准确度,在模型损失中,咱们将绘制训练损失和验证损失。
# 绘制训练和验证的精确值
epoch_range = range(1, 11)
plt.plot(epoch\_range, history.history\['sparse\_categorical_accuracy'\])
# 绘制训练和验证的损失值
plt.plot(epoch_range, history.history\['loss'\])
y\_pred = model.predict\_classes(X_test)
confusion_matrix
mat
plot
论断:
在本教程中,咱们训练了简略的卷积神经网络 (CNN) 来对 CIFAR 图像进行分类。从学习曲线图中咱们察看到,在 3 个 epoch 之后,验证准确度低于训练集准确度,即咱们的模型是过拟合,这意味着咱们减少了模型的复杂性。还应用混同矩阵评估模型。察看到该模型对鸟、猫、鹿、狗等标签的预测精度较低。
最受欢迎的见解
1.r 语言用神经网络改良 nelson-siegel 模型拟合收益率曲线剖析
2.r 语言实现拟合神经网络预测和后果可视化
3.python 用遗传算法 - 神经网络 - 含糊逻辑控制算法对乐透剖析
4. 用于 nlp 的 python:应用 keras 的多标签文本 lstm 神经网络分类
5. 用 r 语言实现神经网络预测股票实例
6.R 语言基于 Keras 的小数据集深度学习图像分类
7. 用于 NLP 的 seq2seq 模型实例用 Keras 实现神经机器翻译
8.python 中基于网格搜索算法优化的深度学习模型剖析糖
9.matlab 应用贝叶斯优化的深度学习