cifar-10データセットの画像を227*227ピクセルに変換してAlexnetトレーニングを行う方法
2858 ワード
cifar-10データセットのダウンロード
公式サイトのアドレス:http://www.cs.toronto.edu/~kriz/cifar.htmlこれは公式サイトからダウンロードしたpython版cifar-10データセットです
cifar-10データセットのロード
得られた結果は
dataは辞書で、「batch_Label’,‘labels’,‘data’,‘filenames’はdataのdataキーに対応する値をXに与える.Xは[100003072]の行列であり、10000はbatchが10000枚のピクチャを含み、3072=32 x 32 x 3であり、32 x 32画素のRGBピクチャを表す.Yは長さ10000のリストであり、値は0〜9であり、それぞれ異なるカテゴリを表す.
cifar-10ピクチャの解像度を変更する
次のコードを実行
図のように、左は元の32 x 32ピクセルピクチャ、右は変換後の227 x 227ピクセルピクチャ
まとめ
実はこの方法で、画像を所望の任意の画素サイズに変換することができますが、この方法はメモリの消費量が大きいので、一度に変換する画像が多すぎないように注意してください.そうしないと、メモリが爆発する可能性があります.
公式サイトのアドレス:http://www.cs.toronto.edu/~kriz/cifar.htmlこれは公式サイトからダウンロードしたpython版cifar-10データセットです
cifar-10データセットのロード
def load_file(cifar):
''' cifar '''
import pickle
with open('D:\cifar-10-batches-py\\'+str(cifar), 'rb') as fo:
data = pickle.load(fo, encoding='latin1')
return data
# data_batch
data = load_file('data_batch_1')
print(data.keys())
X = data['data']
Y = data['labels']
print(X.shape)
print(len(Y))
得られた結果は
dict_keys(['batch_label', 'labels', 'data', 'filenames'])
(10000, 3072)
10000
dataは辞書で、「batch_Label’,‘labels’,‘data’,‘filenames’はdataのdataキーに対応する値をXに与える.Xは[100003072]の行列であり、10000はbatchが10000枚のピクチャを含み、3072=32 x 32 x 3であり、32 x 32画素のRGBピクチャを表す.Yは長さ10000のリストであり、値は0〜9であり、それぞれ異なるカテゴリを表す.
cifar-10ピクチャの解像度を変更する
def convert_cifar10_227pix(X):
'''
cifar-10 [10000,3072] [10000,227,227,3]
Alexnet
X - shape = [10000, 3072]
m - 10000
n_H -
n_W -
channel - RGB
'''
from PIL import Image
import numpy as np
X = np.reshape(X, (10000,3, 32, 32)) # (m, channel,n_H,n_W)
X = X.transpose(0, 2, 3, 1) # (m, n_H,n_W, channel)
X_resized = np.zeros((10000,227,227,3))#
for i in range(0,10000):
img = X[i]
img = Image.fromarray(img)
img = np.array(img.resize((227,227),Image.BICUBIC))# , array
X_resized[i,:,:,:] = img
X_resized /= 255
return X_resized
次のコードを実行
import matplotlib.pyplot as plt
X_resized = convert_cifar10_227pix(X)
X = np.reshape(X, (10000,3, 32, 32))
X = X.transpose(0, 2, 3, 1)
fig, axarr = plt.subplots(1, 2)
axarr[0].imshow(X[4])
axarr[1].imshow(X_resized[4])
図のように、左は元の32 x 32ピクセルピクチャ、右は変換後の227 x 227ピクセルピクチャ
まとめ
実はこの方法で、画像を所望の任意の画素サイズに変換することができますが、この方法はメモリの消費量が大きいので、一度に変換する画像が多すぎないように注意してください.そうしないと、メモリが爆発する可能性があります.