首页 > 编程知识 正文

卷积神经网络图像分类的详细过程,卷积神经网络和图卷积神经网络

时间:2023-05-05 16:29:50 阅读:181417 作者:3219

介绍

卷积神经网络是深度学习的子域。 深度学习算法和人脑一样处理信息,但其规模非常小。 因为,我们的大脑太复杂了(我们的大脑大约有860亿个神经元)

为什么要用CNN进行图像分类? 图像分类通过从图像中提取特征来观察数据集内的特定图案。 由于可训练的参数非常大,使用诚实的星月进行图像分类最终会导致计算成本很高。

例如,如果您有一张50 X 50的猫图像,并希望通过该图像训练传统的诚心诚意的星月将其归类为狗或猫,则可训练的参数为

(50 * 50 ) 100个图像像素乘以隐藏层100偏差2 * 100的输出神经元2的偏差=2,50,302

我们在使用CNN的时候使用了过滤器。 过滤器根据其用途有很多不同的类型。

不同过滤器及其效果示例

滤波器通过在神经元之间执行局部连接模式,有助于利用特定图像的空间局部性。

卷积运算是将两个函数按点相乘以生成第三个函数。 这里,一个函数是我们的图像像素矩阵,另一个是我们的滤波器。 在图像上滑动卷积核,得到两个矩阵的点积,生成的矩阵称为“激活图”或“特征图”。

这里使用垂直卷积对照66图像进行卷积

多个卷积层从图像中提取特征,最后从输出层中提取特征。

实用:使用分步指南谷歌colab。 它还通过谷歌驱动器连接到数据集。 因此,如果要使用相同的设置,则提供的代码必须可用。 请不要忘记根据设定进行适当的变更。

步骤1 :您也可以通过选择数据集来选择感兴趣的数据集,或者创建自己的图像数据集来解决自己的图像分类问题。 在kaggle.com上可以获得很多数据集。

要使用的数据集在这里。

33559 www.ka ggle.com/paultimothymooney/blood-cells

此数据集包含12,500个血细胞增强图像(JPEG ),并带有相应的细胞类型标签(CSV )。 这四种不同的细胞类型各有约3,000张图像,这些图像分为四个不同的文件夹。 细胞类型为嗜酸性粒细胞、淋巴细胞、单核细胞、中性粒细胞。

这是我们需要的所有库和导入它们的代码。

from keras.modelsimportsequentialimporttensorflowastfimporttensorflow _ datasetsastfdstf.enable _ eager _ execution (访问flattenfromkeras.layers.convolutionalimportconvolution 2d, max pooling2dfrom keras.optimizersimportion adamfromkeras.utilsimportnp _ utilsfromsklearn.treeimportdecisiontreeeclassssified importdecisiontreeclassifierfromsklearnimportmetricsfromsklearn.utilsimportshufflefromsklearn.model _ selectionimporttttraion otaspltimportnumpyasnpimportosimportcv2importrandomfromnumpyimport * frompilimportimageimportttttor

将图像调整为200 X 200

path _ test='/content/drive/my drive/semester5- aiml/datasethomeassign/train ' categories=[ ' eosinophil ',]

training=[ ] defcreatetrainingdata (: forcategoryincategories : path=OS.path.join (path _ test,catego

ry)    class_num = CATEGORIES.index(category)    for img in os.listdir(path):      img_array = cv2.imread(os.path.join(path,img))      new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))      training.append([new_array, class_num])createTrainingData() 步骤4:随机整理资料集 random.shuffle(training) 步骤5:分配标签和特征

这两个列表的这种形状将在使用NEURAL NETWORKS的分类中使用。

X =[]y =[]for features, label in training:  X.append(features)  y.append(label)X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3) 步骤6:标准化X并将标签转换为分类数据 X = X.astype('float32')X /= 255from keras.utils import np_utilsY = np_utils.to_categorical(y, 4)print(Y[100])print(shape(Y)) 步骤7:将X和Y拆分以用于CNN X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 4) 步骤8:定义,编译和训练CNN模型

batch_size = 16nb_classes =4nb_epochs = 5img_rows, img_columns = 200, 200img_channel = 3nb_filters = 32nb_pool = 2nb_conv = 3 model = tf.keras.Sequential([    tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu,                           input_shape=(200, 200, 3)),    tf.keras.layers.MaxPooling2D((2, 2), strides=2),    tf.keras.layers.Conv2D(32, (3,3), padding='same', activation=tf.nn.relu),    tf.keras.layers.MaxPooling2D((2, 2), strides=2),    tf.keras.layers.Dropout(0.5),    tf.keras.layers.Flatten(),    tf.keras.layers.Dense(128, activation=tf.nn.relu),    tf.keras.layers.Dense(4,  activation=tf.nn.softmax)]) model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])model.fit(X_train, y_train, batch_size = batch_size, epochs = nb_epochs, verbose = 1, validation_data = (X_test, y_test)) 步骤9:模型的准确性和得分 score = model.evaluate(X_test, y_test, verbose = 0 )print("Test Score: ", score[0])print("Test accuracy: ", score[1])

在这9个简单的步骤中,我们准备了卷积神经网络模型并使用这些技能来解决实际问题。你可以在Analytics Vidhya和Kaggle等平台上练习这些技能。你还可以通过更改不同的参数并发现如何获得最佳的准确性和得分来解决问题,可以尝试更改CNN模型中的batch_size,epoch数,甚至添加/删除图层。

☆ END ☆

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

扫描二维码添加小编↓

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