从CIFAR-10数据集加载图像

9

我正在使用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个条目是图像第一行的红色通道值。
我的实现是否正确?
上述代码给我以下图像: enter image description here

你从哪里获取数据集的? - YLJ
@frankyjuang 你可以在这里找到它:http://www.cs.utoronto.ca/~kriz/cifar.html - Jayanth
为了后人,我认为这是我找到的最清晰的CIFAR 10代码,因为该代码本身非常易于解释:https://www.quora.com/How-can-l-visualize-cifar-10-data-RGB-using-python-matplotlib - stephan
3个回答

14

我使用了

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

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


1
由于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)

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

3
尽管这可能回答了作者的问题,但缺少一些解释性文字和指向文档的链接。裸露的代码片段没有周围的短语并不是很有帮助。您可能也会发现“如何撰写一个好答案”非常有帮助,请编辑您的答案。 - hellow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接