从 cifar-10 数据集加载图像

Posted

技术标签:

【中文标题】从 cifar-10 数据集加载图像【英文标题】:loading an image from cifar-10 dataset 【发布时间】:2017-12-19 16:09:15 【问题描述】:

我正在使用 cifar-10 数据集来训练我的分类器。我已经下载了数据集并尝试显示数据集中的图像。我使用了以下代码:

from six.moves import cPickle as pickle
from  PIL import Image
import numpy as np

f = open('/home/jayanth/udacity/cifar-10-batches-py/data_batch_1', 'rb')

tupled_data= pickle.load(f, encoding='bytes')

f.close()

img = tupled_data[b'data']

single_img = np.array(img[5])

single_img_reshaped = single_img.reshape(32,32,3)

plt.imshow(single_img_reshaped)

数据说明如下: 每个数组存储一个 32x32 彩色图像。前 1024 个条目包含红色通道值,接下来的 1024 个为绿色,最后的 1024 个为蓝色。图像以行优先顺序存储,因此数组的前 32 个条目是图像第一行的红色通道值。

我的实现是否正确?

上面的代码给了我下面的图片:

【问题讨论】:

你从哪里得到数据集的? @frankyjuang 你可以在这里找到它:cs.utoronto.ca/~kriz/cifar.html 对于后代,我认为这是我为 CIFAR 10 找到的最清晰的一段代码,因为代码本身非常易于解释:quora.com/… 【参考方案1】:

我用过

single_img_reshaped = np.transpose(np.reshape(single_img,(3, 32,32)), (1,2,0))

在我的程序中获得正确的格式。

【讨论】:

【参考方案2】:
single_img_reshaped = single_img.reshape(3,32,32).transpose([1, 2, 0])

【讨论】:

虽然这可能会回答作者的问题,但它缺少一些解释性文字和文档链接。如果没有围绕它的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案。【参考方案3】:

由于 Python 使用默认的类 C 索引顺序(行优先顺序),它可以强制以列优先顺序工作:

import numpy as np
import matplotlib.pyplot as plt

# I assume you have loaded your data into x_train (see some tutorial)

data = x_train[0, :] # get a row data
data = np.reshape(data, (32,32,3), order='F' ) # Fortran-like indexing order
plt.imshow(data)

【讨论】:

以上是关于从 cifar-10 数据集加载图像的主要内容,如果未能解决你的问题,请参考以下文章

Computer Vision基于ResNet-50实现CIFAR10数据集分类

图像识别—CIFAR-10/CIFAR-100数据集解析

创建与 cifar-10 数据集格式相同的数据集

CIFAR-10数据集图像分类PCA+基于最小错误率的贝叶斯决策

CIFAR10/CIFAR100数据集介绍

基于卷积神经网络的CIFAR10图像分类