基于深度卷积神经网络的猴痘分类识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 

1. 项目简介

        本文详细介绍了一基于深度卷积神经网络的猴痘分类识别系统。采用TensorFlow和Keras框架,通过卷积神经网络(CNN)进行模型训练和预测,利用迁移学习中的VGG16模型实现99%的分类准确率。系统以Web平台形式呈现,允许患者上传拍摄的病患处图片进行在线测试,系统将自动识别是否患有猴痘病毒。该系统不仅体现了深度学习在医学图像分类中的应用,同时为患者提供了一种方便而准确的自我诊断服务。

2. 卷积神经网络

卷积神经网络(CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。卷积网络是指那些至少在网络的一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络。

卷积神经网络的基本结构由以下几个部分组成:输入层(input layer),卷积层(convolution layer),池化层(pooling layer),激活函数层和全连接层(full-connection layer)。下面以图像分类任务简单介绍一下卷积神经网络结构,具体结构如下图所示。

        核心函数包括:

1.models.Sequential():
Sequential()方法是一个容器,描述了神经网络的网络结构,在Sequential()的输入参数中描述从输入层到输出层的网络结构,可以在()中自定义搭建神经网络的网络结构,类比在桌面上拼积木的话,Sequential()相当于放置积木的桌面。

2.Conv2D():
卷积层,动态提取图片局部特征,
tf.keras.layers.Conv2D(
input_shape = (高, 宽, 通道数), #仅在第一层有
filters = 卷积核个数,对应输出的维数
kernel_size = 卷积核尺寸,(n,k),如果为一个整数则宽和高相同
strides = 卷积横向和纵向的步长,如果为一个整数则横向和纵向相同
padding = ‘SAME’ or ‘VALID’,valid:表示不够卷积核大小的块,则丢弃;same表示不够卷积核大小的块就补0,所以输出和输入形状相同
activation = ‘relu’ or ‘sigmoid’ or ‘tanh’ or ‘softmax’等
)

3.Dropout():
drop层,为了减少过拟合。Dropout的机制:在每次的神经网络的反向传播中,会随机选择一些神经元,设定其反向传播对应的参数为0,然后对于被改变后的神经网络进行反向传播,相当于在反向传播时有一些"神经元"被移除了(与L1正则化效果相同)
主要参数:dropout( rate=丢弃率) 设置为 0.1,则意味着会丢弃 10% 的神经元

4.MaxPooling2D():
layers.MaxPooling2D((2, 2))
主要参数:pool_size:2个整数的整数或元组/列表:(pool_height,pool_width),用于指定池窗口的大小;可以是单个整数,以指定所有空间维度的相同值.
平均池化层为AvgPooling2D()

5.Flatten(): 用于将输入层的数据压成一维的数据

6.Dense(): 全连接层
主要参数: layers.Dense(units, activation), #全连接层,特征进一步提取
units:输出的维度大小,即神经元的个数
activation:激活函数

7.model.summary(): 打印模型结构

3. 基于卷积神经网络的猴痘分类识别

3.1 猴痘图片数据集读取

train_loc = './datas/Train'
val_loc = './datas/Val'
test_loc = './datas/Test'# ......fig = plt.gcf()
fig.set_size_inches(10 , 10)
for idx , sample in enumerate(samples):sub = plt.subplot(4 , 3 , idx+1)img  = mpimg.imread(sample)plt.imshow(img)plt.show()

3.2 卷积神经网络模型构建

         利用Keras深度学习框架,搭建卷积神经网络模型:

model = tf.keras.models.Sequential([#data_augmentation,tf.keras.layers.Conv2D(16,(3,3), activation='relu', input_shape = (224,224,3)), ### 1st conv layertf.keras.layers.MaxPool2D((2,2), strides=(2, 2)),## 2nd conv layertf.keras.layers.Conv2D(32,(3,3), activation='relu'),tf.keras.layers.MaxPool2D((2,2), strides=(2, 2)),## 3rd conv layertf.keras.layers.Conv2D(64,(2,2), activation='relu'),tf.keras.layers.MaxPool2D((2,2), strides=(2, 2)),### 4th conv layertf.keras.layers.Conv2D(128,(2,2), activation='relu'),tf.keras.layers.MaxPool2D((2,2), strides=(2, 2)),### 5th conv layertf.keras.layers.Conv2D(32,(2,2), activation='relu'),tf.keras.layers.MaxPool2D((2,2), strides=(2, 2)),### flatten output and feed it into dense layertf.keras.layers.Flatten(),tf.keras.layers.Dense(32, activation='relu'),## output layertf.keras.layers.Dense(1, activation='sigmoid')]
)

3.3 模型训练和性能评估 

        对训练集完成 40个 epoch 的训练,同时设定 early stop 机制,并绘制模型训练损失函数和准确率曲线:

history = model.fit(train_dataset, batch_size=16,validation_data = validation_dataset,epochs=epochs,callbacks= [early_stopping_callback])print("Learning stoped on epoch:", early_stopping_callback.stopped_epoch)

         利用测试集进行模型性能评估,可以看出,测试集预测准确率为 92%,从损失函数曲线也可以看出,继续训练性能还会有所提升。

test_loss, test_acc = model.evaluate(test_dataset, verbose=2)
print('测试集预测准确率:', test_acc)
print('测试集平均损失:', test_loss)

8/8 - 0s - loss: 0.2652 - accuracy: 0.9211 - 356ms/epoch - 44ms/step
测试集预测准确率: 0.9210526347160339
测试集平均损失: 0.2651972472667694

4. 基于迁移学习的模型优化

4.1  VGG16 预训练模型

vgg16卷积神经网络总共有16层,13个卷积层和3个全连接层,第一次经过64个卷积核的两次卷积后,采用一次pooling,第二次经过两次128个卷积核卷积后,再采用pooling,再重复两次三个512个卷积核卷积后,再pooling,最后经过三次全连接。

        加载 VGG16 模型权重,并添加输出层:

# 加载模型参数
VGG16_model_con.load_weights('./vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')
# 冻结前13层网络参数  保证加载的预训练参数不被改变
for layer in VGG16_model_con.layers[:13]:layer.trainable = False# 添加模型分类层(顶层)
VGG16_model_all = tf.keras.models.Sequential([VGG16_model_con,layers.Flatten(),                       layers.Dense(64, activation='relu'), layers.Dense(32, activation='relu'),layers.Dense(1, activation="sigmoid")               
])   
VGG16_model_all.summary()  # 打印网络结构

 4.2 模型训练和性能评估

history = VGG16_model_all.fit(train_dataset,validation_data=validation_dataset,epochs=epochs,callbacks=[checkpointer, earlystopper])# ......test_loss, test_acc = VGG16_model_all.evaluate(test_dataset, verbose=2)
print('测试集预测准确率:', test_acc)
print('测试集平均损失:', test_loss)

8/8 - 16s - loss: 5.6020e-04 - accuracy: 1.0000 - 16s/epoch - 2s/step
测试集预测准确率: 1.0
测试集平均损失: 0.0005602042656391859

         可以看出,利用VGG16进行迁移学习后,测试集的预测准确率达到了100%,效果非常好!

4.3 模型保存

        将训练好的模型权重保存为 h5 格式的权重文件:

save_id= 'vgg16_monkey_pox_best_model.h5' 
model_save_loc=os.path.join('./', save_id)
VGG16_model_all.save(model_save_loc)
print ('model was saved as ' , model_save_loc ) 

5. 猴痘分类识别系统

5.1 首页

5.2 猴痘病毒实时分类预测

6. 结论

        本文详细介绍了一基于深度卷积神经网络的猴痘分类识别系统。采用TensorFlow和Keras框架,通过卷积神经网络(CNN)进行模型训练和预测,利用迁移学习中的VGG16模型实现99%的分类准确率。系统以Web平台形式呈现,允许患者上传拍摄的病患处图片进行在线测试,系统将自动识别是否患有猴痘病毒。该系统不仅体现了深度学习在医学图像分类中的应用,同时为患者提供了一种方便而准确的自我诊断服务。

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python 毕设精品实战案例
2. 自然语言处理 NLP 精品实战案例
3. 计算机视觉 CV 精品实战案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/316300.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 系统编程:文件系统

文件类型 Linux 文件分为 3 类: 普通文件:文本文件、二进制文件,要学习如何创建、复制、移动、重命名和删除这样的文件。目录(Windows 中的“文件夹”与之类似)伪文件:设备文件、命名管道、proc 文件&…

Simple Facebook Sign-In

简单的Facebook登录为Android、iOS、Windows、Mac、通用Windows平台(UWP)和Unity制作的WebGL应用程序提供了基于OAuth 2.0的Facebook登录。 优点: ● 跨平台游戏和应用程序的跨平台用户身份验证 ● 无插件,无第三方库,无依赖● 对建筑规模没有影响 ● 客户端-服务器应…

复试 || 就业day02(2024.01.02)项目一

文章目录 前言最小二乘法的推导使用正规方程求解 y w x b ywxb ywxb多元线性回归 y w 1 x 1 w 2 x 2 b yw1x1w2x2b yw1x1w2x2b总结 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容来自某机构网课&#xff…

视频会员付费系统源码 影视视频模版源码 模板PC+WAP苹果CMS影视模板源码

快猫视频会员付费视频系统/x站视频模板/苹果CMS影视模板/可打包成双端APP 适用程序:苹果cmsv10 兼容性和面向场景: 1、Windows 平台: IIS/Apache PHP(5.6) MySQL(5.5) 2、Linux/Unix 平台…

基于 ESP32-C3 开启 Flash 加密和安全启动并进行 OTA 测试

软件: esp-idf v5.1.2 硬件: ESP32-C3 board 1. 首先,准备一个明文固件 hello-world.bin 基于 esp-idf-v5.1.2\examples\get-started\hello_world 例程,使用如下指令,直接编译,获取明文固件 hello-worl…

哨兵1号回波数据(L0级)FDBAQ压缩算法详解

本专栏目录: 全球SAR卫星大盘点与回波数据处理专栏目录-CSDN博客 1. 全球SAR卫星回波数据压缩算法统计 各国的SAR卫星的压缩算法按照时间轴排列如下: 可以看出传统的分块BAQ压缩算法(上图粉色)仍然是主流,哨兵1号其实也有传统的BAQ压缩模式。 本文介绍哨兵1号用的FDBAQ算…

安卓Android Studio读写FM1208CPU卡源码

本示例使用的发卡器:https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.6c46789elLwMzv&id615391857885 package com.usbreadertest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.M…

Spring Boot 2.7.11 集成 GraphQL

GraphQL介绍 GraphQL(Graph Query Language)是一种用于API的查询语言和运行时环境,由Facebook于2012年创建并在2015年公开发布。与传统的RESTful API相比,GraphQL提供了更灵活、高效和强大的数据查询和操作方式。 以下是GraphQL…

关于时间格式yyyy-M-d或yyyy-MM-d到yyyy-MM-dd的转换

工作时遇到前端传的时间格式是"2023-12-3 17:41:52",和"2023-1-1 17:41:52"但是我想要的是"2023-12-03 17:41:52"和"2023-01-01 17:41:52"。下面给大家分享几个解决方法 方法一: 找前端!让他改&…

ES6 class详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

频谱论文:空间频率插值的无线电地图 Space-Frequency-Interpolated Radio Map

#频谱# K. Sato, K. Suto, K. Inage, K. Adachi and T. Fujii, "Space-Frequency-Interpolated Radio Map," in IEEE Transactions on Vehicular Technology, vol. 70, no. 1, pp. 714-725, Jan. 2021, doi: 10.1109/TVT.2021.3049894. 东京理科大学&#xff0…

GZ075 云计算应用赛题第4套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷4 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenSt…