首页 > 编程知识 正文

图卷积神经网络,卷积神经网络结构

时间:2023-05-04 22:50:32 阅读:128743 作者:3310

个人资料

我最近的文章是关于卷积网络,其工作和组件: 本文使用卷积神经网络执行图像分类,详细了解所有步骤。 因此,如果您不熟悉这个,请继续阅读。

简单来说,CNN是一种深度学习算法,也是适合图像和视频的神经网络类型之一。 可以通过CNN实现各种功能。 其中包括图像分类、图像识别、目标检测、人脸识别等。

今天,我们将对Tensorflow库的一部分3358www.Sina.com/运行CIFAR10 数据集。 它由船舶、青蛙、飞机、狗、汽车等各种物体的图像组成。 此数据集有60,000张彩色图像和10个标签。 现在进入代码部分吧。

# importingnecessarylibrariesimportnumpyasnpimportmatplotlib.pyplotasplt % matplotlibinline # 实施的toconverttocategoricaldatafromtensorflow.keras.utilsimportto _ categorical # ibrariesforbuildingmodelfromtensorflow.keras.modelsimportsequentialfromtensorflow.keras.layersimportdense,Conv2D, keras.layersimportdense flattenfromtensorflow.keras.datasetsimportcifar 10 # loading the data (x _ train,y_train ),) y_test(=CIFAR10.load_data ) )探索性数据分析# shapeofthedatasetprint (x _ train.shape ) print ) y_train.shape )

我们的训练数据有50,000张图像,测试数据有10,000张图像,大小为32*32和3个通道,即RGB (红、绿、蓝)

# checkingthelabelsnp.unique (y _ train ) )

# firstimageoftrainingdataplt.subplot (121 ) PLT.imshow(x_train[0] ) PLT.title (标签: { } '.format ) )

#可视化the first 20 imagesinthedatasetforiinrange (20 ) : # subplot PLT.subplot (5,5,i 1 ) # plotttingpixeldataplpllot

预处理数据可以只针对数据预处理执行两个步骤。图像分类,以及首先是缩放图像的像素值到0到1之间

# scalethedatatoliebetween0to 1x _ train=x _ train/255 x _ test=x _ test/255 print (

# reshapingthetrainandtestlablesto 1dy _ train=y _ train.reshape (-1,) y_test=y_test.reshape(-1,)上的图中现在来构建CNN模型吧。

模型构建正如前面讨论的那样,深度学习模型的构建分为模型定义、编译、拟合、模型评估和预测五个步骤。 这也在这里进行。

步骤1 :模型模型=sequential (# addingthefirstconvolutionlayermodel.add (conv 2d ) 32,(3,3 ),activation='relu ' 定义3 ) ) addingmaxpoolinglayermodel.add (max pool 2d (2,2 ) ) addinganotherconvolutionlayermodel.add ) conv2d(64,

add(Dense(216,activation='relu'))#adding output layermodel.add(Dense(10,activation='softmax'))

我们添加了第一个带有 32 个大小为 (3*3) 的过滤器的卷积层,使用的激活函数是 Relu,并为模型提供输入形状。

接下来添加了大小为 (2*2)的Max Pooling 层。最大池化有助于减少维度。CNN 组件的解释请参考:https://www.analyticsvidhya.com/blog/2021/08/beginners-guide-to-convolutional-neural-network-with-implementation-in-python/

然后我们又添加了一个卷积层, 其中包含 64 个大小为(3*3) 的过滤器 和一个大小为 (2*2)的 最大池化层

在下一步中,我们将层展平以将它们传递到 Dense 层,并添加了一个包含 216 个神经元的Dense 层。

最后,输出层添加了一个 softmax 激活函数,因为我们有 10 个标签。

第 2 步:编译模型 model.compile(optimizer='rmsprop',loss='sparse_categorical_crossentropy',metrics=['accuracy']) 第 3 步:拟合模型 model.fit(X_train,y_train,epochs=10)

如上图所示,我们的准确率为 89%,损失为 0.31。让我们看看测试数据的准确性。

第 4 步:评估模型 model.evaluate(X_test,y_test)

测试数据的准确率为 69%,与训练数据相比非常低,这意味着我们的模型过度拟合。

第 5 步:进行预测 pred=model.predict(X_test)#printing the first element from predicted dataprint(pred[0])#printing the index of print('Index:',np.argmax(pred[0]))

因此,预测函数给出的是所有10个标签的概率值,概率最高的标签是最终预测。在我们的例子中,我们得到了第三个索引处的标签作为预测。

将预测值与实际值进行比较以查看模型执行的正确程度。

在下图中,我们可以看到预测值与实际值的差异。

y_classes = [np.argmax(element) for element in pred]print('Predicted_values:',y_classes[:10])print('Actual_values:',y_test[:10])

当我们看到我们的模型过度拟合时,我们可以使用一些额外的步骤来提高模型性能并减少过度拟合,例如向模型添加 Dropouts或执行数据增强,因为过度拟合问题也可能是由于可用数据量较少。

在这里,我将展示我们如何使用 Dropout 来减少过拟合。我将为此定义一个新模型。

model4=Sequential()#adding the first Convolution layermodel4.add(Conv2D(32,(3,3),activation='relu',input_shape=(32,32,3)))#adding Max pooling layermodel4.add(MaxPool2D(2,2))#adding dropoutmodel4.add(Dropout(0.2))#adding another Convolution layermodel4.add(Conv2D(64,(3,3),activation='relu'))model4.add(MaxPool2D(2,2))#adding dropoutmodel4.add(Dropout(0.2))model4.add(Flatten())#adding dense layermodel4.add(Dense(216,activation='relu'))#adding dropoutmodel4.add(Dropout(0.2))#adding output layermodel4.add(Dense(10,activation='softmax'))model4.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])model4.fit(X_train,y_train,epochs=10)

model4.evaluate(X_test,y_test)

通过这个模型,我们得到了76%的训练准确率(低于第一个模型),但我们得到了72%的测试准确率,这意味着过拟合的问题在一定程度上得到了解决。

尾注

这就是我们在 Python 中实现 CNN 的方式。这里使用的数据集是一个简单的数据集,可用于学习目的,但一定要尝试在更大和更复杂的数据集上实现 CNN。这也将有助于发现更多挑战和解决方案。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。