加载并可视化FashionMNIST


在这个notebook中,我们要加载并查看 Fashion-MNIST 数据库中的图像。

任何分类问题的第一步,都是查看你正在使用的数据集。这样你可以了解有关图像和标签格式的一些详细信息,以及对如何定义网络以识别此类图像集中的模式的一些见解。

PyTorch有一些你可以使用的内置数据集,而FashionMNIST就是其中之一,它已经下载到了这个notebook中的data/目录中,所以我们要做的就是使用FashionMNIST数据集类加载这些图像,并使用DataLoader批量加载数据。

加载数据

数据集类和张量

torch.utils.data.Dataset是一个表示数据集的抽象类,而 FashionMNIST类是这个数据集类的扩展,它可以让我们加载批量的图像/标签数据,并且统一地将变换应用于我们的数据,例如将所有图像转换为用于训练神经网络的张量。张量类似于numpy数组,但也可以在GPU上使用,用来加速计算 。

下面,让我们看一看如何构建训练数据集。

# our basic libraries
import torch
import torchvision # data loading and transforming
from torchvision.datasets import FashionMNIST
from torch.utils.data import DataLoader
from torchvision import transforms # The output of torchvision datasets are PILImage images of range [0, 1].
# We transform them to Tensors for input into a CNN ## Define a transform to read the data in as a tensor
data_transform = transforms.ToTensor() # choose the training and test datasets
train_data = FashionMNIST(root='./data', train=True,
download=False, transform=data_transform) # Print out some stats about the training data
print('Train data, number of images: ', len(train_data))

Train data, number of images: 60000

数据迭代与批处理

接下来,我们将要使用的是torch.utils.data.DataLoader,它是一个可以批量处理数据并置乱数据的迭代器。

在下一个单元格中,我们将数据置乱,并以大小为20的批量加载图像/标签数据。

# prepare data loaders, set the batch_size
## TODO: you can try changing the batch_size to be larger or smaller
## when you get to training your network, see how batch_size affects the loss
batch_size = 20 train_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True) # specify the image classes
classes = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

将一些训练数据可视化

这个单元格会遍历该训练数据集,并使用dataiter.next()加载一个随机批次的图像/标签数据。然后,它会在2 x batch_size/2网格中将这批图像和标签可视化。

import numpy as np
import matplotlib.pyplot as plt %matplotlib inline # obtain one batch of training images
dataiter = iter(train_loader)
images, labels = dataiter.next()
images = images.numpy() # plot the images in the batch, along with the corresponding labels
fig = plt.figure(figsize=(25, 4))
for idx in np.arange(batch_size):
ax = fig.add_subplot(2, batch_size/2, idx+1, xticks=[], yticks=[])
ax.imshow(np.squeeze(images[idx]), cmap='gray')
ax.set_title(classes[labels[idx]])

更详细地查看图像

该数据集中的每个图像都是28x28像素且已归一化的灰度图像。

关于归一化的说明

归一化可以确保在训练CNN的过程中,先后经历前馈与反向传播步骤时,每个图像特征都将落入类似的值范围内,而不是过度激活该网络中的特定层。在前馈步骤期间,该神经网络会接收输入图像并将每个输入像素乘以一些卷积滤波器权重并加上偏差,然后应用一些激活和池化函数。如果没有归一化,反向传播步骤中的计算梯度将会非常大,并且会导致我们的损失增加而不是收敛。

# select an image by index
idx = 2
img = np.squeeze(images[idx]) # display the pixel values in that image
fig = plt.figure(figsize = (12,12))
ax = fig.add_subplot(111)
ax.imshow(img, cmap='gray')
width, height = img.shape
thresh = img.max()/2.5
for x in range(width):
for y in range(height):
val = round(img[x][y],2) if img[x][y] !=0 else 0
ax.annotate(str(val), xy=(y,x),
horizontalalignment='center',
verticalalignment='center',
color='white' if img[x][y]<thresh else 'black')

最新文章

  1. IOS 非ARC开发内存管理的几条规则
  2. java集合类的学习(一)
  3. ios 的touch事件分析
  4. C# Susan边缘检测(Susan Edge Detection)
  5. HP “云图”GPU虚拟化工作站解决方案
  6. Xcode 必备插件管理器 http://alcatraz.io
  7. 浅谈iOS网络编程之一入门
  8. Android HTTPS(3) IOException: Hostname 解决方案
  9. Eclipse中查看JDK类库的源代码
  10. cordova 插件开发
  11. ruby中printf &quot;%x&quot;%-4为何会打印开头..
  12. DWM1000 蓝点无限 PCB样板
  13. 业务-----部门Service常用逻辑
  14. 石子合并(区间DP经典例题)
  15. 启动和停止mysql的正确姿势
  16. CSS宽度高度的百分比取值基于谁
  17. D. GCD Counting(树上dp)
  18. Tomcat 设置URI默认字符集为UTF-8
  19. 2018 Multi-University Training Contest 6-oval-and-rectangle(hdu 6362)-题解
  20. katalon系列十二:自动化上传文件、下载文件

热门文章

  1. 利用adb查看手机设备ip和连接手机的两种方式
  2. 更新Jenkins
  3. AI小白必读:深度学习、迁移学习、强化学习别再傻傻分不清
  4. 开源 UI 库中,唯一同时实现了大表格虚拟化和树表格的 Table 组件
  5. Go gin框架 使用swagger生成API文档
  6. Intel HEX格式
  7. Linux为STDOUT的关键字设置颜色
  8. 最全vue的vue-amap使用高德地图插件画多边形范围
  9. ASP。netcore,Angular2 CRUD动画使用模板包,WEB API和EF 1.0.1
  10. 第五周:面向对象部分内容总结(5)---java设计规则