首页>>人工智能->基于深度学习的天气识别算法对比研究

基于深度学习的天气识别算法对比研究

时间:2023-11-29 本站 点击:0

? 我的环境:

语言环境:Python3

深度学习环境:TensorFlow2

? 相关教程:

编译器教程:新手入门深度学习 | 1-2:编译器Jupyter Notebook

深度学习环境配置教程:新手入门深度学习 | 1-1:配置深度学习环境

一个深度学习小白需要的所有资料我都放这里了:新手入门深度学习 | 目录

建议你学习本文之前先看看下面这篇入门文章,以便你可以更好的理解本文:

? 新手入门深度学习 | 2-1:图像数据建模流程示例

强烈建议大家使用Jupyter Lab编译器打开源码,你接下来的操作将会非常便捷的!

大家好,我是K同学啊!这次为大家准备了一个天气识别的实例,文章我采用了VGG16ResNet50IceptionV3DenseNet121LeNet-5MobileNetV2EfficientNetB0等7个模型来识别天气,使用的数据集包含 5,531 张不同类型天气的图像,最后模型的识别准确率为 93.9%

? 重点说明:本文为大家准备了多个算法进行对比分析,每一个算法的学习率都是独立的,你可以自由调整。并且为你提供了准确率(Accuracy)损失(Loss)召回率(recall)精确率(precision)以及AUC值等众多指标的对比分析,你只需要选择需要对比的模型、指标以及数据集即可进行相应的对比分析。

? 在本代码中你还可以探究的内容如下:

同一个学习率对不同模型的影响

同一个模型在不同学习率下的性能

Dropout层的作用(解决过拟合问题)

? 效果展示:

我们的代码流程图如下所示:

? 前期准备工作

import tensorflow as tfgpus = tf.config.list_physical_devices("GPU")if gpus:    tf.config.experimental.set_memory_growth(gpus[0], True)  #设置GPU显存用量按需使用    tf.config.set_visible_devices([gpus[0]],"GPU")plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号# 打印显卡信息,确认GPU可用print(gpus)

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

? 导入数据

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)

Found 5531 files belonging to 9 classes.Using 4425 files for training.

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""val_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="validation",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)

Found 5531 files belonging to 9 classes.Using 1106 files for validation.

class_names = train_ds.class_namesprint(class_names)

['dew', 'fogsmog', 'frost', 'hail', 'lightning', 'rain', 'rainbow', 'rime', 'snow']

AUTOTUNE = tf.data.AUTOTUNE# 归一化def train_preprocessing(image,label):    return (image/255.0,label)train_ds = (    train_ds.cache()    .map(train_preprocessing)    # 这里可以设置预处理函数    .prefetch(buffer_size=AUTOTUNE))val_ds = (    val_ds.cache()    .map(train_preprocessing)    # 这里可以设置预处理函数    .prefetch(buffer_size=AUTOTUNE))

plt.figure(figsize=(14, 8))  # 图形的宽为10高为5for images, labels in train_ds.take(1):    for i in range(28):        plt.subplot(4, 7, i + 1)        plt.xticks([])        plt.yticks([])        plt.grid(False)        # 显示图片        plt.imshow(images[i])        plt.title(class_names[np.argmax(labels[i])])plt.show()

? 设置评估指标metrics

评估指标用于衡量深度学习算法模型的质量,评估深度学习算法模型对于任何项目都是必不可少的。在深度学习中,也有许多不同类型的评估指标可用于衡量算法模型,例如accuracyprecisionrecallauc等都是常用的评估指标。

关于评估指标metrics的详细介绍请参考:?新手入门深度学习 | 3-5:评估指标metrics

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]0

? 定义模型

? VGG16模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]1

? ResNet50模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]2

? InceptionV3模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]3

? DenseNet121算法模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]4

? LeNet-5模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]5

? MobileNetV2算法模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]6

? EfficientNetB0算法模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]7

? 训练模型

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]8

[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]9

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)0

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)1

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)2

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)3

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)4

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)5

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)6

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)7

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)8

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""train_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="training",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)9

Found 5531 files belonging to 9 classes.Using 4425 files for training.0

Found 5531 files belonging to 9 classes.Using 4425 files for training.1

? 结果分析

? 准确率对比分析

Found 5531 files belonging to 9 classes.Using 4425 files for training.2

? 损失对比分析

Found 5531 files belonging to 9 classes.Using 4425 files for training.3

? 召回率对比分析

召回率(Recall),也称查全率,是被正确分类的正例(反例)样本,占所有正例(反例)样本的比例。

Found 5531 files belonging to 9 classes.Using 4425 files for training.4

? 混淆矩阵

Found 5531 files belonging to 9 classes.Using 4425 files for training.5

Found 5531 files belonging to 9 classes.Using 4425 files for training.6

? 评估指标生成

support:当前行的类别在测试数据中的样本总量;

precision:被判定为正例(反例)的样本中,真正的正例样本(反例样本)的比例,精度=正确预测的个数(TP)/被预测正确的个数(TP+FP)。

recall:被正确分类的正例(反例)样本,占所有正例(反例)样本的比例,召回率=正确预测的个数(TP)/预测个数(TP+FN)。

f1-score: 精确率和召回率的调和平均值,F1 = 2精度召回率/(精度+召回率)。

accuracy:表示准确率,也即正确预测样本量与总样本量的比值。

macro avg:表示宏平均,表示所有类别对应指标的平均值。

weighted avg:表示带权重平均,表示类别样本占总样本的比重与对应指标的乘积的累加和。

Found 5531 files belonging to 9 classes.Using 4425 files for training.7

Found 5531 files belonging to 9 classes.Using 4425 files for training.8

? Loss/accuracy/Precision/Recall对比分析

Found 5531 files belonging to 9 classes.Using 4425 files for training.9

? AUC

即ROC曲线(TPR vs FPR)下的面积,其值在0~1之间,AUC值越高,代表分类器效果越好。更详细的介绍请看AUC 评价指标详解,准确率(ACC),敏感性(sensitivity),特异性(specificity)计算 Python3【TensorFlow2入门手册】一文。

关于ROC曲线应用的其他实例:

深度学习100例 | 第35天:脑肿瘤识别

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""val_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="validation",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)0

? 指定图片进行预测

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""val_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="validation",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)1

"""关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789"""val_ds = tf.keras.preprocessing.image_dataset_from_directory(    "./2-DataSet/",    validation_split=0.2,    subset="validation",    label_mode = "categorical",    seed=12,    image_size=(img_height, img_width),    batch_size=batch_size)2

? 点击我获取 数据+代码 ?

原文:https://juejin.cn/post/7097506935276044302


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