前回のCIFARに続いて、MNISTの画像保存について。
こちらはクセがなく処理がラクです。
はじめに
Keras のload_dataで読み込んだデータを可視化する方法。
(1) CIFAR10、CIFAR100 画像への変換方法
(2) MNIST、Fashin-MNIST 画像への変換方法
(3) IMDB Review、Reuters Topics テキストへの変換方法
(4) Boston Housing data のcsvへの変換方法
この記事では「(2) MNIST、Fasion-MNIST画像への変換方法」について書いています。
ソースコード一式
こちらに(1)~(4) すべてのコードを一括したファイルをアップしています。
コード見たほうが早いわーな方はどうぞ。
MNIST、Fashion-MNIST の画像保存
from tensorflow.keras.datasets import mnist, fashion_mnist
# Load data from keras API
(x_train, y_train), (x_test, y_test) = mnist.load_data()
まず、load_data()で、train, testにデータを読み込みます。
y_train, y_testにはこの時点で、クラスIDがint配列として格納されています。
具体的には、[0,5,2,1,3・・・] のようにクラスIDが入っています。
MNISTでは
これらクラスIDがそのまま数字として割り当てられているので、
クラスID:0 のデータ(=「0」の画像)を0のフォルダに保存していきます。
他のクラスIDについても同様。
TrainデータとTestデータを分けて保存したいので、
まずは、”train” “test”というフォルダを生成、
その下に「0」から「9」までのフォルダを生成します。
OUT_DIR = 'mnist'
# make train/test dirs and class dirs
for cid in range(10):
os.makedirs(os.path.join(OUT_DIR,'train', '{:d}'.format(cid)), exist_ok=True)
os.makedirs(os.path.join(OUT_DIR,'test', '{:d}'.format(cid)), exist_ok=True)
あとは、
クラスIDを見ながら、numpy → Pillowで画像化して保存
Trainデータ、Testデータでそれぞれセット分繰り返すだけで完了。
# convert train data
for num, (x_data, y_data) in enumerate(zip(x_train, y_train)):
# make file path
fpath = os.path.join(OUT_DIR,'train', '{:d}'.format(y_data), 'train_{:05d}.png'.format(num))
# convert numpy to pillow and save
Image.fromarray(x_data).save(fpath)
# convert test data
for num, (x_data, y_data) in enumerate(zip(x_test, y_test)):
# make file path
fpath = os.path.join(OUT_DIR,'test', '{:d}'.format(y_data), 'test_{:05d}.png'.format(num))
# convert numpy to pillow and save
Image.fromarray(x_data).save(fpath)
以下のように保存されます。
Fashion-MNIST のクラス定義 保存
MNISTとの違いは、
「クラスIDが何に対応しているか」のみで、
画像保存コードはそのまま流用できます。
Fashion-MNISTは、10クラスのデータセットですが、
下記ページの表に示すようにクラスIDが割り振られています。
ID | Class |
0 | T-shirt/top |
1 | Trouser |
2 | Pullover |
3 | Dress |
4 | Coat |
5 | Sandal |
6 | Shirt |
7 | Sneaker |
8 | Bag |
9 | Ankle boot |
というわけで、“train” “test”それぞれのフォルダの下に、
「クラスID_クラス名」のフォルダを生成しておきます。
その中に画像を保存していくことにします。
OUT_DIR = 'fasion_mnist'
# Load data from keras API
(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()
# define class names from ex: https://www.tensorflow.org/tutorials/keras/classification
class_list = ['T-shirt_top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle_boot']
# make train/test dirs and class dirs
for cid, class_name in enumerate(class_list):
os.makedirs(os.path.join(OUT_DIR,'train', '{:d}_{}'.format(cid,class_name)), exist_ok=True)
os.makedirs(os.path.join(OUT_DIR,'test', '{:d}_{}'.format(cid,class_name)), exist_ok=True)
保存処理自体は、MNISTと同様、
クラスIDを見ながら、numpy → Pillowで画像化して保存
Trainデータ、Testデータでそれぞれセット分繰り返すだけです。
違いは、「保存フォルダパスの生成部分」のみ。
# convert train data
for num, (x_data, y_data) in enumerate(zip(x_train, y_train)):
# make file path
fpath = os.path.join(OUT_DIR,'train', '{:d}_{}'.format(y_data,class_list[y_data]), 'train_{:05d}.png'.format(num))
# convert numpy to pillow and save
Image.fromarray(x_data).save(fpath)
# convert test data
for num, (x_data, y_data) in enumerate(zip(x_test, y_test)):
# make file path
fpath = os.path.join(OUT_DIR,'test', '{:d}_{}'.format(y_data,class_list[y_data]), 'test_{:05d}.png'.format(num))
# convert numpy to pillow and save
Image.fromarray(x_data).save(fpath)
以下のように保存されます。
次回は、
(3) IMDB Review、Reuters Topics テキストへの変換方法
について書きます。
最後まで読んでいただき、ありがとうございます!
ブックマーク登録、
ツイッターフォロー、
よろしくお願いいたします!🙇♂️🙇♂️
↓↓↓