深度学习02 — PyTorch CIFAR10彩色图片识别

本文详细介绍了如何在PyTorch中使用GPU设置环境,导入CIFAR10数据集,构建简单CNN网络,包括Conv2d、MaxPool2d层的详解,以及如何设置超参数、训练和测试模型的过程。作者还通过可视化展示了训练和验证的精度与损失曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🍨 本文为[🔗365天深度学习训练营]中的学习记录博客

🍖 原作者:[K同学啊 | 接辅导、项目定制]

 一、 前期准备

1. 设置GPU

如果设备上支持GPU就使用GPU, 否则使用CPU

import torch
import torch.nn as nn
import matplotlib.pyplot as plt
import torchvision

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

device

2. 导入数据

使用datasets 下载CIFAR10数据集,并划分好训练集和测试集

使用dataloader加载数据,并设置好基本的batch_size

train_ds = torchvision.datasets.CIFAR10('data', train=True,transform=torchvision.transforms.ToTensor(), # 将数据类型转化为Tensor
                                      download=True)
test_ds  = torchvision.datasets.CIFAR10('data', train=False, transform=torchvision.transforms.ToTensor(), # 将数据类型转化为Tensor
                                      download=True)

 使用dataloader加载数据,并设置好基本的batch_size

batch_size = 32

train_dl = torch.utils.data.DataLoader(train_ds, batch_size=batch_size, shuffle=True)

test_dl  = torch.utils.data.DataLoader(test_ds, batch_size=batch_size)

# 取一个批次查看数据格式
# 数据的shape为:[batch_size, channel, height, weight]
# 其中batch_size为自己设定,channel,height和weight分别是图片的通道数,高度和宽度。
imgs, labels = next(iter(train_dl))
imgs.shape

 3. 数据可视化

squeeze() 函数 的功能是从矩阵shape 中, 去掉维度为1 的。例如一个矩阵的shape是(5 ,1),使用这个函数后,结果是(5,)

import numpy as np

 # 指定图片大小,图像大小为20宽、5高的绘图(单位为英寸inch)
plt.figure(figsize=(20, 5)) 
for i, imgs in enumerate(imgs[:20]):
    # 维度缩减
    npimg = imgs.numpy().transpose((1, 2, 0))
    # 将整个figure分成2行10列,绘制第i+1个子图。
    plt.subplot(2, 10, i+1)
    plt.imshow(npimg, cmap=plt.cm.binary)
    plt.axis('off')
    
#plt.show()  如果你使用的是Pycharm编译器,请加上这行代码

 二、构建简单的CNN网络

1. torch.nn.Conv2d() 详解

函数原型:

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

关键参数说明:

  • in_channels ( int ) – 输入图像中的通道数
  • out_channels ( int ) – 卷积产生的通道数
  • kernel_size ( int or tuple ) – 卷积核的大小
  • stride ( int or tuple , optional ) -- 卷积的步幅。默认值:1
  • pad
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值