第P3周:Pytorch实现天气识别

一、导入库

import torch
import torch.nn as nn
import torchvision.transforms as transforms
import torchvision
from torchvision import transforms, datasets
import matplotlib.pyplot as plt
from PIL import Image
import torch.nn.functional as F
import warnings

import os,PIL,pathlib,random

二、导入数据

#使用pathlib.Path()函数将字符串类型的文件夹路径转换为pathlib.Path对象
data_dir = './data/weather_photos'
#使用glob()方法获取data_dir路径下的所有文件路径,并以列表形式存储在data_paths中
data_dir = pathlib.Path(data_dir)

#glob('*')表示匹配所有文件和文件夹
data_paths = list(data_dir.glob('*'))
#print(data_paths)
#通过split()函数对data_paths中的每个文件路径执行分割操作,获得各个文件所属的类别名称,并存储在classeNames中
classeNames = [str(path).split("\\")[2] for path in data_paths]

# 指定图像文件夹路径
image_folder = './data/weather_photos/cloudy/'

# 获取文件夹中的所有图像文件
#os.listdir列出指定目录下的所有文件和目录名
image_files = [f for f in os.listdir(image_folder) if f.endswith((".jpg", ".png", ".jpeg"))]

# 创建Matplotlib图像
#axes代表的是每个子图
fig, axes = plt.subplots(3, 8, figsize=(16, 6))

# 使用列表推导式加载和显示图像
#.flat是将axes展开成一个迭代器然后能遍历
for ax, img_file in zip(axes.flat, image_files):
    #将图像文件夹的路径image_folder和当前迭代到的图像文件名img_file合并成一个完整的文件路径img_path
    img_path = os.path.join(image_folder, img_file)
    img = Image.open(img_path)
    ax.imshow(img)
    ax.axis('off')

# 显示图像
#plt.tight_layout()
#plt.show()

天气图片

三、数据预处理

total_datadir = './data/weather_photos'

train_transforms = transforms.Compose([
    transforms.Resize([224, 224]),  # 将输入图片resize成统一尺寸,也就是缩放到224*224
    transforms.ToTensor(),          # 将PIL Image或numpy.ndarray转换为tensor,并归一化到[0,1]之间
    transforms.Normalize(           # 标准化处理-->转换为标准正太分布(高斯分布),使模型更容易收敛
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225])  # 其中 mean=[0.485,0.456,0.406]与std=[0.229,0.224,0.225] 从数据集中随机抽样计算得到的。
])

total_data = datasets.ImageFolder(total_datadir,transform=train_transforms)
#print(total_data)

#划分数据集
train_size = int(0.8 * len(total_data))
test_size  = len(total_data) - train_size
#按照大小随机划分数据集和测试集
train_dataset, test_dataset = torch.utils.data.random_split(total_data, [train_size, test_size])

batch_size = 32

train_dl = torch.utils.data.DataLoader(train_dataset,
                                       batch_size=batch_size,
                                       shuffle=True,
                                       num_workers=1)
test_dl = torch.utils.data.DataLoader(test_dataset,
                                      batch_size=batch_size,
                                      shuffle=True,
                                      num_workers=1)

四、创建模型


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值