分類子のトレーニングに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エントリは画像の最初の行の赤のチャネル値になります。
私の実装は正しいですか?
使った
single_img_reshaped = np.transpose(np.reshape(single_img,(3, 32,32)), (1,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)
single_img_reshaped = single_img.reshape(3,32,32).transpose([1, 2, 0])