700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 图像分类数据集(线性神经网络 需结合从零实现softmax回归一起学习)

图像分类数据集(线性神经网络 需结合从零实现softmax回归一起学习)

时间:2018-07-20 21:59:22

相关推荐

图像分类数据集(线性神经网络 需结合从零实现softmax回归一起学习)

文章目录

图像分类数据集读取小批量整合所有组件小结

图像分类数据集

导入必要的类包。

import torchimport torchvisionfrom torch.utils import data#torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。#torchvision.transforms主要是用于常见的一些图形变换。from torchvision import transformsfrom d2l import torch as d2ld2l.use_svg_display() #使用svg格式在Jupyter中显示绘图。

我们可以通过框架中的内置函数将Fashion-MNIST数据集下载并读取到内存中。

注意远程下载这些数据集时,需要注意两个方面。

1.需要使用vpn进行远程服务器下载2.如果使用的jupyter notebook下载一直失败(主机中断连接),此时换用pycharm进行下载即可。

# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式,# 并除以255使得所有像素的数值均在0到1之间trans = transforms.ToTensor() #和tansforms.ToPILImage()对照,实现pil与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)

Fashion-MNIST由10个类别的图像组成, 每个类别由训练数据集(train dataset)中的6000张图像 和测试数据集(test dataset)中的1000张图像组成。 因此,训练集和测试集分别包含60000和10000张图像。 测试数据集不会用于训练,只用于评估模型性能。

len(mnist_train), len(mnist_test)

(60000, 10000)

每个输入图像的高度和宽度均为28像素。数据集由灰度图像组成,其通道数为1。 为了简洁起见,将高度像素 h h h 、宽度像素 w w w 图像的形状记为 h × w h \times w h×w 或 ( h , w ) (h,w) (h,w)。

mnist_train[0][0].shape #训练集的形状

torch.Size([1, 28, 28])

Fashion-MNIST中包含的10个类别,分别为t-shirt(T恤)、trouser(裤子)、pullover(套衫)、dress(连衣裙)、coat(外套)、sandal(凉鞋)、shirt(衬衫)、sneaker(运动鞋)、bag(包)和ankle boot(短靴)。 以下函数用于在数字标签索引及其文本名称之间进行转换。

#通过索引列表获取文本标签def get_fashion_mnist_labels(labels): #@save"""返回Fashion-MNIST数据集的文本标签"""text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat','sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']return [text_labels[int(i)] for i in labels] #返回一个标签列表get_fashion_mnist_labels(range(10)) #输出调用函数获取的标签列表s

['t-shirt','trouser','pullover','dress','coat','sandal','shirt','sneaker','bag','ankle boot']

def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5): #@save"""绘制图像列表"""figsize = (num_cols * scale, num_rows * scale)#定义行长、列长_, axes = d2l.plt.subplots(num_rows, num_cols, figsize=figsize) #设置绘图板的子图个数axes = axes.flatten()for i, (ax, img) in enumerate(zip(axes, imgs)):if torch.is_tensor(img): #张量形式的图片# 图片张量ax.imshow(img.numpy())else:# PIL图片 #PIL类型的图片ax.imshow(img)ax.axes.get_xaxis().set_visible(False)ax.axes.get_yaxis().set_visible(False)if titles:ax.set_title(titles[i])return axes

以下是训练数据集中前几个样本的图像及其相应的标签。

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))

array([<AxesSubplot:title={'center':'ankle boot'}>,<AxesSubplot:title={'center':'t-shirt'}>,<AxesSubplot:title={'center':'t-shirt'}>,<AxesSubplot:title={'center':'dress'}>,<AxesSubplot:title={'center':'t-shirt'}>,<AxesSubplot:title={'center':'pullover'}>,<AxesSubplot:title={'center':'sneaker'}>,<AxesSubplot:title={'center':'pullover'}>,<AxesSubplot:title={'center':'sandal'}>,<AxesSubplot:title={'center':'sandal'}>,<AxesSubplot:title={'center':'t-shirt'}>,<AxesSubplot:title={'center':'ankle boot'}>,<AxesSubplot:title={'center':'sandal'}>,<AxesSubplot:title={'center':'sandal'}>,<AxesSubplot:title={'center':'sneaker'}>,<AxesSubplot:title={'center':'ankle boot'}>,<AxesSubplot:title={'center':'trouser'}>,<AxesSubplot:title={'center':'t-shirt'}>], dtype=object)

读取小批量

为了使我们在读取训练集和测试集时更容易,我们使用内置的数据迭代器,而不是从零开始创建。 回顾一下,在每次迭代中,数据加载器每次都会读取一小批量数据,大小为batch_size。 通过内置数据迭代器,我们可以随机打乱了所有样本,从而无偏见地读取小批量。

batch_size = 256#多线程工作,此时的线程数量为4个def get_dataloader_workers():"""使用4个进程来读取数据"""return 4#小批量数据迭代器, 打乱数据集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'

'5.23 sec'

整合所有组件

现在我们定义 load_data_fashion_mnist 函数,用于获取和读取 Fashion-MNIST 数据集。 这个函数返回训练集和验证集的数据迭代器。 此外,这个函数还接受一个可选参数 resize,用来将图像大小调整为另一种形状。

#返回训练集与测试集的数据迭代器def load_data_fashion_mnist(batch_size, resize=None): #@save"""下载Fashion-MNIST数据集,然后将其加载到内存中"""trans = [transforms.ToTensor()]if resize:trans.insert(0, transforms.Resize(resize))#将PIL图片格式转化为tensor数据类型trans = pose(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=True,num_workers=get_dataloader_workers()))

下面,我们通过指定resize参数来测试load_data_fashion_mnist函数的图像大小调整功能。

train_iter, test_iter = load_data_fashion_mnist(32, resize=64)for X, y in train_iter:print(X.shape, X.dtype, y.shape, y.dtype)break

torch.Size([32, 1, 64, 64]) torch.float32 torch.Size([32]) torch.int64

我们现在已经准备好使用Fashion-MNIST数据集,便于下面的章节调用来评估各种分类算法。

小结

Fashion-MNIST是一个服装分类数据集,由10个类别的图像组成。

我们将高度像素 h h h ,宽度像素图像的形状记为 h × w h \times w h×w 或 ( h , w ) (h,w) (h,w) 。

数据迭代器是获得更高性能的关键组件。依靠实现良好的数据迭代器,利用高性能计算来避免减慢训练过程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。