栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

动手学深度学习笔记-图像分类数据集

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动手学深度学习笔记-图像分类数据集

目录
  • 导入所需库
  • 使用svg展示图片
  • 将FashionMNIST数据下载并读取到内存之中
  • 编写图像可视化程序
  • 查看读取时间
  • 整合所有组件

导入所需库
%matplotlib inline
import torch
import torchvision
from torch.utils import data
from torchvision import transforms
from d2l import torch as d2l
使用svg展示图片
# 使用svg展示图片
d2l.use_svg_display()
将FashionMNIST数据下载并读取到内存之中
# 将FashionMNIST数据下载并读取到内存之中
trans = transforms.ToTensor() # 将图片转换为tensor
mnist_train = torchvision.datasets.FashionMNIST(
    root="../data", # 下载目录
    train=True, #下载的是训练数据集
    transform=trans, #下载并转换
    download=True  # 从网络下载
)
mnist_test = torchvision.datasets.FashionMNIST(
    root="../data",
    train=False, #测试数据集
    transform=trans,
    download=True
)

len(mnist_train), len(mnist_test)
编写图像可视化程序
def get_fashion_mnist_labels(labels):
    # 返回Fashion-MNIST数据集的文本标签
    # t-shirt(T恤),trouser(牛仔裤),pullover(套衫),dress(裙子),coat(外套)
    # sandal(凉鞋),shirt(衬衫),sneaker(运动鞋),bag(包),ankle boot(短靴)
    text_labels = ['t-shirt','trouser','pullover','dress','coat',
                   'sandal','shirt','sneaker','bag','ankle boot']
    return [text_labels[int(i)] for i in labels]

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): # num_rows为画布行数 num_cols为画布列数 scale为图像放大倍数
    # 绘制图像列表
    figsize = (num_cols * scale, num_rows * scale)  # (3, 13.5)
    _, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize) # 设置画布 figsize设置为放大后的倍数
    axes = axes.flatten() # 可以直接用axes[i]代替axes[i, j],长度为18的ndarray,访问某个画布
    # enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
    # list(enumerate(['Spring', 'Summer', 'Fall', 'Winter']))=[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
    for i, (ax, img) in enumerate(zip(axes, imgs)): # 遍历18个画布 ax为画布 img为图片
        if torch.is_tensor(img):
            # 图片张量
            ax.imshow(img.numpy())
        else:
            # PIL图片
            ax.imshow(img)
        ax.axes.get_xaxis().set_visible(False)  # 取消显示x轴
        ax.axes.get_yaxis().set_visible(False)  # 取消显示y轴
        if titles:
            ax.set_title(titles[i])
    return axes
# 将data_iter使用iter()函数转化为迭代对象,使用next()函数输出第一次迭代结果
# X.shape=torch.Size([18, 1, 28, 28]) y.shape=torch.Size([18])  X是图片  y是标签
X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))
show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))

结果如下:

查看读取时间
# 读取一个批量 大小为batch_size
def get_dataloader_workers():
    # 使用4个进程来读取数据
    return 4

batch_size = 256
train_iter = data.DataLoader(mnist_train,  # 加载训练集
                             batch_size, #加载大小
                             shuffle=True, #是否随机打乱
                             num_workers=get_dataloader_workers()
                            )

timer = d2l.Timer()
for X, y in train_iter:
    continue
f'{timer.stop():.2f}sec'
# 有时训练速度要比读取速度要快,这是不理想的
整合所有组件
# 整合所有组件
def load_data_fashion_mnist(batch_size, resize=None):
    trans = [transforms.ToTensor()]
    if resize:
        trans.insert(0, transforms.Resize(resize))
    trans = transforms.Compose(trans)
    mnist_train = torchvision.datasets.FashionMNIST(
        root="../data", # 下载目录
        train=True, #下载的是训练数据集
        transform=trans, #下载并转换
        download=True  # 从网络下载
    )
    mnist_test = torchvision.datasets.FashionMNIST(
        root="../data",
        train=False, #测试数据集
        transform=trans,
        download=True
    )
    return (data.DataLoader(mnist_train, batch_size, shuffle=True,
                            num_workers=get_dataloader_workers()),
            data.DataLoader(mnist_test, batch_size, shuffle=False,
                            num_workers=get_dataloader_workers()))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号