Keras CNN简介及实例

150 阅读5分钟

Keras CNN

Keras CNN简介

Keras CNN是keras卷积神经网络的缩写,它由各种层组成,包括conv1D层、conv2D层、conv3D层、可分离的Conv 1D层、可分离的Conv2D层、深度的conv2D层、conv2D转置层和Conv 3D转置层。在这篇文章中,我们将研究keras的主题,即keras CNN。我们将通过查看副标题获得更多相关知识,其中包括什么是keras CNN、如何使用keras CNN、keras CNN模型的用途、实例以及有关结论。

什么是keras CNN?

Keras CNN是利用卷积的神经网络,卷积是对矩阵进行的一种数学运算。该神经网络由包含过滤器的卷积层组成,类似于包含数字的矩阵。

对于卷积神经网络,我们需要通过某些输入图像,在应用过滤器后,发生卷积,并产生输出图像。卷积的过程包含以下内容---

  • 我们要在指定的输入图像上面的特定位置叠加我们想要的过滤器。
  • 之后,我们需要对过滤器矩阵内存在的数值和图像内对应的数值进行元素计算。
  • 我们将不得不把我们通过元素乘法得到的乘积相加,这将是我们输出图像内像素的最终值。
  • 以上三个步骤对每个位置都要重复。

如何使用keras CNN?

我们可以用它来对CIFAR中的图像进行分类,这涉及到使用顺序API或任何其他方式训练和创建我们的keras模型。使用keras CNN创建和训练模型所需的步骤如下--

  • 导入所有必要的库和类。其中一个重要的是程序顶部的Tensorflow。
  • 通过下载CIFAR10数据集准备原始输入数据,该数据集包含近十个类,有超过60000张彩色格式的图像。在这个测试中,图像的数量大约为10000张,而训练的图像大约为50000张。
  • 下一步是验证数据集并检查它是否正确。
  • 我们现在需要创建一个卷积的基础,按照常见的模式,有一个像conv2D和maxpooling 2d一样的层堆叠。
  • 现在我们将在顶部再添加一个层,这将是一个密集层,用于完成我们的模型。这个层将从所有其他张量层的输出中获得输入,负责进行分类。
  • 编译模型和训练模型将是我们的下一步,可以使用.compile()和.fit()的方法来编译和训练。
  • 现在我们可以通过使用evaluate()方法来评估模型,以绘制和标注数值,这将给出模型的最终结果。

keras CNN模型的用途

Uses of keras CNN model

keras CNN的特点和用途在CIFAR图像的分类中被发现得非常多。下面提到的是keras CNN的特点,它是卷积神经网络。

  • 输入层的值是1,8,28。
  • Conv2D构成了模型的第一层,共包含32个过滤器,以及用于激活的relu函数的存在。此外,它的核大小设置为(3,3)。
  • 还有一个conv2d层,作为第二层,它有一个relu激活函数和64个滤波器,核的总大小设置为(3,3)。
  • 该神经网络的第三层是Max pooling,池子的大小为(2,2)。
  • 第五层是扁平化层,用于将所有输入扁平化为一个维度。
  • 第六层由128个神经元组成,是一个密集层,其中也包含relu激活函数。
  • Droput层构成了神经网络的第七层,它的数值为0.5。
  • 我们的CNN的最后一层和第八层包括一个softmax激活函数,包含10个神经元。
  • 我们将利用分类交叉熵的损失函数。
  • 将使用的优化器是Ada delta。
  • 我们的神经网络的度量将是准确的。
  • 批量大小为128。
  • 训练迭代次数的epoch值为20。

Keras CNN的例子

下面提到了不同的例子。

//importing the necessary classes and libraries
import keras
from keras.datasets import mnist
from keras.sampleEducbaModels import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as sampleEducba
import numpy as np
// Loading the mnist dataset for the sample purpose
(xValueForTraining, yValueForTraining), (xValueForTesting, yValueForTesting) = mnist.load_data()
//modify the existing data set for our requirement of the sampleEducbaModel.
rowsOfImage, columnsOfImage = 28, 28
if sampleEducba.image_data_format() == 'channels_first':
xValueForTraining = xValueForTraining.reshape(xValueForTraining.shape[0], 1, rowsOfImage, columnsOfImage)
xValueForTesting = xValueForTesting.reshape(xValueForTesting.shape[0], 1, rowsOfImage, columnsOfImage)
input_shape = (1, rowsOfImage, columnsOfImage)
else:
xValueForTraining = xValueForTraining.reshape(xValueForTraining.shape[0], rowsOfImage, columnsOfImage, 1)
xValueForTesting = xValueForTesting.reshape(xValueForTesting.shape[0], rowsOfImage, columnsOfImage, 1)
input_shape = (rowsOfImage, columnsOfImage, 1)
xValueForTraining = xValueForTraining.astype('float32')
xValueForTesting = xValueForTesting.astype('float32')
xValueForTraining /= 255
xValueForTesting /= 255
yValueForTraining = keras.utils.to_categorical(yValueForTraining, 10)
yValueForTesting = keras.utils.to_categorical(yValueForTesting, 10)
// Model creation
sampleEducbaModel = Sequential()
sampleEducbaModel.add(Conv2D(32, kernel_size = (3, 3),
activation = 'relu', input_shape = input_shape))
sampleEducbaModel.add(Conv2D(64, (3, 3), activation = 'relu'))
sampleEducbaModel.add(MaxPooling2D(pool_size = (2, 2)))
sampleEducbaModel.add(Dropout(0.25)) sampleEducbaModel.add(Flatten())
sampleEducbaModel.add(Dense(128, activation = 'relu'))
sampleEducbaModel.add(Dropout(0.5))
sampleEducbaModel.add(Dense(10, activation = 'softmax'))
// Model compilation
sampleEducbaModel.compile(loss = keras.losses.categorical_crossentropy,
optimizer = keras.optimizers.Adadelta(), metrics = ['accuracy'])
// training the sampleEducbaModel by using fit function
sampleEducbaModel.fit(
xValueForTraining, yValueForTraining,
batch_size = 128,
epochs = 12,
verbose = 1,
validation_data = (xValueForTesting, yValueForTesting)
)

执行时的输出 -

Keras CNN output 1

如果我们将模型的评估代码添加到上面的代码中,如下图所示 -

// Model evaluation by using test data
score = sampleEducbaModel.evaluate(xValueForTesting, yValueForTesting, verbose = 0)
print('Loss acquired during testing :', score[0])
print('Test accuracy:', score[1])

执行上述代码片断的输出是--

output of the execution

99.22%是识别笔迹的测试准确性。我们将在上面的预测代码中加入以下代码,这将导致不同的输出 -

// Prediction
resultantPredictions = sampleEducbaModel.predict(xValueForTesting)
resultantPredictions = np.argmax(pred, axis = 1)[:5] puttedLabel= np.argmax(yValueForTesting,axis = 1)[:5] print(resultantPredictions)
print(puttedLabel)

执行后的输出结果 -

Output after execution

总结

Keras CNN,即卷积神经网络,被广泛用于对CIFAR类型的图像进行分类。该网络由许多层组成,有助于预测和评估结果。