当前位置: 首页 > 科技观察

使用您自己的数据构建一个简单的卷积神经网络

时间:2023-03-15 08:53:19 科技观察

在本文中,我们将构建一个卷积神经网络,该网络将在7种类型的数千张图像上进行训练,即:花、汽车、猫、马、人、自行车、狗,然后能够预测给定图像是猫、狗还是人。此CNN实施涵盖以下主题使用您自己的图像数据集加载和预处理您自己的数据集在Keras中设计和训练CNN模型绘制损失和精度曲线评估模型并预测测试图像的输出类可视化CNN的中间层输出绘图结果加载和预处理您自己的数据集:我们将使用的数据集包含从互联网收集和标记的7个类别。Python代码如下;PATH=os.getcwd()#Definedatapathdata_path=PATH+'/data'data_dir_list=os.listdir(data_path)data_dir_listoutput:['bike','cars','cats','dogs','flowers','horses','human']可视化一些图像,我们可以看到图像是128x128像素,Python代码如下:#Visualizesomeimagesimage=X_train[1441,:].reshape((128,128))plt.imshow(image)plt.show()用自己的数据搭建一个简单的卷积神经网络接下来我们开始在Keras中设计编译CNN模型,Python实现如下:#Initializingtheinputshapeinput_shape=img_data[0].shape#DesignCNNsequentialmodelmodel=Sequential([Convolution2D(32,3,3,border_mode='same',activation='relu',input_shape=input_shape),Convolution2D(32,3,3,activation='relu'),MaxPooling2D(pool_size=(2,2)),Dropout(0.5),Convolution2D(64,3,3,activation='relu'),MaxPooling2D(pool_size=(2,2)),Dropout(0.5),Flatten(),Dense(64,activation='relu'),Dropout(0.5),Dense(num_classes,activation='softmax')])#Compilingthemodelmodel.compile(loss='categorical_crossentropy',optimizer='adadelta',metrics=['accuracy'])拟合模型后,我们可以在整个迭代过程中可视化训练和验证。ist=model.fit(X_train,y_train,batch_size=16,nb_epoch=num_epoch,verbose=1,validation_data=(X_test,y_test))我们现在可以使用我们的模型使用以下代码预测新图像的新类别:#Predictingthetestimageprint((model.predict(test_image)))print('Imageclass:',model.predict_classes(test_image))正如我们在下面看到的,我们的模型正确地将图像分类为类[0]-自行车。[[3.6560327e-012.7960737e-061.2630007e-032.9311934e-011.6894026e-023.0998811e-011.3129448e-02]]Imageclass:[0]这是一个没有归一化的混淆矩阵我们现在可以保存模型和权重以便在实际应用。