对于CIFAR100等数据集的图片展示讨论

在使用DataLoader处理完数据集以后,数据里图片的维度和类型会发生改变,具体见下:

# DataLoader之前
print(train_data.data[0].shape) #(32, 32, 3) 原始数据集图像的维度

# DataLoader之后
print(example_imgs[0].shape) #torch.Size([3, 32, 32]),经过DataLoader后,数据的维度会从32,32,3变为3,32,32,即神经网络能够接受的维度

要想在DataLoaer处理完数据后输出图片,这里提供2种方法:

方法一

该方法相当于是使用np.transpose让图片的维度变为原来的样子,然后输出跟原来通道数一致的图片,代码如下(这里设置的batch_size为64,相当于把一个batch全部输出):

examples = enumerate(test) #将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
batch_idx, (example_imgs, example_labels) = next(examples) #next的作用是返回迭代器的下一个项目,这里相当于取出来了test_data的第一个batch
print(batch_idx) #0
print(example_imgs[0].shape) #torch.Size([3, 32, 32]),经过DataLoader后,数据的维度会从32,32,3变为3,32,32,即神经网络能够接受的维度
print(example_labels[0].shape) #torch.Size([])
fig = plt.figure()
for i in range(64):
    img=example_imgs[i] #3,32,32是原本图片数据的维度
    img=np.transpose(img,(1,2,0)) #32,32,3需要转换成该维度才能输出3通道图片,即彩色图片,这里img已经是tensor格式了,
    plt.subplot(8, 8, i + 1)      #但可以用np.transpose进行维度转换
    plt.imshow(img)
# plt.savefig('CIFAR100')
plt.show()

方法二

该方法没有进行维度转换,而是在图片的后面加了个[i],个人认为是把图片的第i-1个通道输出来了。比如如果原数据集中图片是3通道彩色图片,那么i就可以取0,1,2,而输出的图片仅仅是一个通道;如果图片是只有1个通道的灰度图片,那么i只能取0.代码见下:

examples = enumerate(test_data) #将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
batch_idx, (example_data, example_targets) = next(examples)
print(example_data[0].shape) 
fig = plt.figure()
for i in range(64):
  plt.subplot(8,8,i+1)
  plt.imshow(example_data[i][0]) 
  plt.imshow(img)
plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值