いまさらながらCIFAR-10データセットについて調べたので簡単にメモしておきます。
githubにこの記事のコードはあげてあります。
https://github.com/tocom242242/aifx_blog_codes/blob/master/datasets/cifar10.ipynb
CIFAR-10データセットとは
CIFAR-10データセットとは、32×32のカラー画像とラベルがセットになってるデータセットです。
画像分類のコンペ等でよく使われています。
データセットの中の1データを見てみます。
見えづらいですが、馬の画像データが入ってることがわかります。
この馬の画像とhorse(馬)の組み合わせで1つのデータの組み合わせになっています。実際にはhorseではなく番号で表現されています。
Tensorflowからダウンロード
Tensorflowを使うと簡単にデータセットをダウンロードできます。
まず、必要なモジュールのimport
import tensorflow as tf
import numpy as np
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
データはtensorflowを使って取得します。
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
これだけです。ちなみに取得したデータは
- train_images : 学習用の画像データ
- train_labels : 学習用のラベルデータ(画像が何かを表すもの)
- test_images : テスト用の画像データ
- test_labels : テスト用のラベルデータ
になります。
データの内容の確認
データの大きさ
データを見てみます。まずデータのサイズは
print(f"train_size:{len(train_images)}, test_size:{len(test_images)}")
#=> train_size:50000, test_size:10000
学習データが50000個, 検証用データが10000個あることがわかります。
学習用画像データのshapeを見てみると,
train_images.shape
#=> (50000, 32, 32, 3)
50000枚の32×32のrgb(3)のデータがあることがわかります。
ラベルデータについて
データのラベルの種類としては飛行機・自動車・鳥・猫・クマ・犬・カエル・馬・船・トラックの10個用意されています。
実際のラベルデータには数値で保存されていますが、各数値は以下のように対応しています。
unique_labels = np.unique(train_labels)
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
'dog', 'frog', 'horse', 'ship', 'truck']
for idx, name in zip(unique_labels, class_names):
print(f"{idx}:{name}")
#=>
0:airplane
1:automobile
2:bird
3:cat
4:deer
5:dog
6:frog
7:horse
8:ship
9:truck
各画像は同じ枚数分あります。
# 各データの個数
y = np.bincount(train_labels.reshape(len(train_labels)))
plt.bar(x=class_names, height=y)
画像データのプロット
実際にデータ画像をいくつかみてみます。
plt.figure(figsize=(7,7))
for i in range(9):
plt.subplot(3,3,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i][0]])
plt.show()