【データセット】CIFAR-10データセットについて

いまさらながらCIFAR-10データセットについて調べたので簡単にメモしておきます。

githubにこの記事のコードはあげてあります。
https://github.com/tocom242242/aifx_blog_codes/blob/master/datasets/cifar10.ipynb

CIFAR-10データセットとは

CIFAR-10データセットとは、32x32のカラー画像とラベルがセットになってるデータセットです。

画像分類のコンペ等でよく使われています。

データセットの中の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枚の32x32の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()

参考文献

タイトルとURLをコピーしました