《------往期经典推荐------》
二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~
《------正文------》
CNN python图像分类网络结构:
CNN的架构
简介
CNN(卷积神经网络)是计算机视觉的支柱。即使是更快的RCNN等对象检测算法也依赖CNN来执行其任务。因此,对CNN有一个很好的理解可以帮助你在计算机视觉领域出类拔萃。我们将使用CNN来执行图像分类。我将分享样板代码,你可以重用。
导入库
第一步是导入必要的库
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
如果在导入时出现任何错误,请确保安装库。
数据处理
我的目录结构如下:
images
|____train
| |___class A
| |___class B
| |___class C
|
|-----test
| |___class A
| |___class B
| |___class C
我们将加载数据并执行基本的图像预处理。由于收集的图像大小不同,因此需要对图像进行重新定位。选择150 * 150的图像尺寸。图像的像素值范围为0到255。为了提供更好的结果,像素值被重新缩放,因此所有值都在0和1之间。对现有的图像集执行不同的技术,例如水平翻转、旋转。
batch_size = 130
IMG_SHAPE = 150
#Rescaling the images and applying horizontal flip
image_gen = ImageDataGenerator(rescale=1./255, horizontal_flip=True)
train_data_gen = image_gen.flow_from_directory(
batch_size=batch_size,
directory=train_dir,
shuffle=True,
target_size=(IMG_SHAPE,IMG_SHAPE)
)
#Rescaling the images and rotation it by 45 degree
image_gen = ImageDataGenerator(rescale=1./255, rotation_range=45)
train_data_gen = image_gen.flow_from_directory(batch_size=batch_size,
directory=train_dir,
shuffle=True,
target_size=(IMG_SHAPE, IMG_SHAPE))
train_data_gen = image_gen_train.flow_from_directory(
batch_size=batch_size,
directory=train_dir,
shuffle=True,
target_size=(IMG_SHAPE,IMG_SHAPE),
class_mode='sparse'
)
val_data_gen = image_gen_val.flow_from_directory(batch_size=batch_size,
directory=val_dir,
target_size=(IMG_SHAPE, IMG_SHAPE),
class_mode='sparse'))
构建模型
一旦数据预处理完成,我们就可以定义我们的模型架构。你可以使用不同的超参数。卷积和最大池化应用于数据集,然后将其发送到输出层。模型被展平。应用Dropout以防止图像的过度拟合。我们正在使用准确性作为评估指标来编制模型。
卷积层的作用
model = Sequential()
model.add(Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_SHAPE,IMG_SHAPE, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, 3, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, 3, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
# Adding dropout to turn down some neurons
model.add(Flatten())
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(5, activation='softmax'))
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
训练模型
一旦我们定义了架构,我们就可以继续将数据馈送到CNN模型中来训练它。
epochs = 120
history = model.fit_generator(
train_data_gen,
steps_per_epoch=int(np.ceil(train_data_gen.n / float(batch_size))),
epochs=epochs,
validation_data=val_data_gen,
validation_steps=int(np.ceil(val_data_gen.n / float(batch_size)))
)
可以重复使用提供的样板代码,并根据用例训练CNN模型。
好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » TensorFlow构建CNN卷积神经网络模型的基本步骤:数据处理、模型构建、模型训练
发表评论 取消回复