我正在使用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个条目是图像第一行的红色通道值。
我的实施是否正确?
答案 0 :(得分:13)
我用过
single_img_reshaped = np.transpose(np.reshape(single_img,(3, 32,32)), (1,2,0))
在我的程序中获取正确的格式。
答案 1 :(得分:0)
single_img_reshaped = single_img.reshape(3,32,32).transpose([1, 2, 0])
答案 2 :(得分:0)
由于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)