web-dev-qa-db-ja.com

cifar-10データセットからの画像の読み込み

分類子のトレーニングに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

8
Jayanth

使った

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

私のプログラムで正しいフォーマットを取得します。

13
Thomas Pinetz

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
Carl
single_img_reshaped = single_img.reshape(3,32,32).transpose([1, 2, 0])
0