目录
5.1、四种典型的深度学习算法:(CNN、RNN、GANS、RL)
项目背景
随着传感器网络和全球定位系统等技术的进步,兼有时间与空间特性的气象数据体量爆炸式增长,针对时空序列预测的深度学习模型研究得到迅猛发展。然而,长期以来应用于天气预报的传统机器学习方法在提取数据时间相关性与空间依赖性方面的效果往往并不理想,而深度学习方法可通过人工神经网络自动提取特征以有效提高天气预报准确度,且已有实验证明其在编码长期空间信息的建模方面有相当优秀的效果。研究人员也在持续探索将由观测数据驱动的深度学习模型与基于物理理论的数值天气预报模式相结合,构建拥有更高预测精度与更长预报时限的混合模型。首先将天气预报领域的深度学习问题与经典深度学习问题从数据格式,问题模型与评价指标三个方面进行了对比研究,回顾了深度学习在天气预报领域的发展历程与应用现状并总结分析了深度学习技术与数值天气预报相结合的最新进展,并对未来的发展方向和研究重点进行了展望,旨在对以后天气预报领域的深度学习研究提供参考。
日常生活中人类的各种活动都与天气现象息息相关,天气现象的实时自动识别在自动驾驶、智慧交通、智能监控等方面都具有重要的研究价值和广阔的应用前景。近年来,随着深度学习在机器视觉领域的迅速发展,由于卷积神经网络能够提取天气图像中丰富、抽象、深层次的语义信息,本文基于深度学习对天气现象识别算法进行研究。
一、前期准备
我的环境:
● 语言环境:Python3.8以上
● 编辑器:PyCharm,jupyter notebook
● 学习环境:Pytorch11.7● 数据集:飞桨Ai Studio
● 深度学习环境:TensorFlow2
1.1、导入依赖项
import torch
import torch.nn as nn
import torchvision.transforms as transforms
from torchvision import transforms, datasets
import os,PIL,pathlib
● torch是PyTorch的核心库。
●torch.nn是神经网络模块,包括定义各种神经网络层和激活函数。
●torchvision.transforms包含了各种图像处理工具。
●torchvision.datasets包含了一些常用的数据集,如CIFAR10、MNIST等。
●os是Python中的一个操作系统接口模块,可以处理文件和目录。
●PIL(Python Imaging Library)是Python的一个图像处理库。
●pathlib是Python 3中新添加的一个面向对象的文件路径库,可以方便地处理文件和目录路径。
1.2、设置CPU
对当前设备进行判断是否支持CUDA(即GPU加速),如果支持则使用CUDA,否则使用CPU。
# 没有GPU使用CPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
二、导入数据集
定义数据所在文件夹的路径,将数据所在文件夹的路径转换为pathlib.Path对象,方便后续处理,然后获取数据文件夹中所有文件的路径,使用glob(‘*’)可以匹配文件夹中的所有文件,最后将数据文件夹中的所有类别名称提取出来,存储在classeNames列表中。
设置好CPU之后,我们开始导入我们需要的数据集:
import os,PIL,random,pathlib
data_dir = 'E:/深度学习/数据集/weather_photos'
data_dir = pathlib.Path(data_dir)
data_paths = list(data_dir.glob('*'))
classeNames = [str(path).split("\\")[4] for path in data_paths]
classeNames
2.1、对数据集种类进行划分
数据集一共分为cloudy
——阴天
、rain
——雨天
、shine
——晴天、sunrise
——夕阳四类,分别存放于weather_photos
文件夹中以各自名字命名的子文件夹中。
2.2、查看数据集
查看数据集有多少图片。
运行出来显示照片一共有1125张照片供我们训练。
我们导入PIL库,这个库是用来为我们的Python解释器添加图像处理功能,比如打开某个文件夹里面的某张照片:
这个库是Python的第三方库,PIL支持Python2,但是不支持Python3,我们需要下载的是pillow,这个库下载之后我们导包的时候还是需要用PIL来导入,用pillow或者Pillow都是不行的。
2.3、数据预处理
定义数据集所在的总文件夹路径,定义数据集的数据转换方式,将Resize()函数用于将输入图片resize成统一尺寸,ToTensor()函数用于将PIL Image或numpy.ndarray转换为tensor,并将像素值归一化到[0,1]之间,Normalize()函数用于将tensor标准化处理,转换为标准正太分布(高斯分布),从而使模型更容易收敛。
total_datadir = 'E:/深度学习/数据集/weather_photos'
train_transforms = transforms.Compose([
transforms.Resize([224, 224]), # 将输入图片resize成统一尺寸
transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为tensor,并归一化到[0,1]之间
transforms.Normalize( # 标准化处理-->转换为标准正太分布(高斯分布),使模型更容易收敛
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.