Kerasのサンプルを1つ理解 → 似たような問題を解決する何かを作ってみる、という流れでいくつか問題を解いていく、ということをしていきたい
最初は画像分類をしてみる。
サンプルはこれ
まだデータやコードを見ていないけれど、多分
- 学習データとして犬とか猫とか車みたいなタグ(多分10種類)がつけられた画像が提供される
- 画像とタグをもとに学習する
- 新しい画像が猫なのか、犬なのか、車なのか、... を判別できるシステムを作る
みたいなことをするんだと思う。
なので、10種類くらいの画像の教師データから新規画像が何の画像なのか判別する方法をサンプルを通して学ぶ → 自分で似たようなテーマの問題を設定してそれを解くことができるシステムを作ってみる、ということをやってみる
ということで、今回は提供されるデータがどのような形式なのかを調べてみる
実行は基本的にGoogle Colaboratoryでやっていくつもり
今回は https://colab.research.google.com/drive/1T0-GO8EvEcY4qIeb686LTB9e4iwqUz1V
from keras.datasets import cifar10 data = cifar10.load_data() data
を実行してみると
((array([[[[ 59, 62, 63], [ 43, 46, 45], [ 50, 48, 43], ..., [158, 132, 108], [152, 125, 102], [148, 124, 103]], [[ 16, 20, 20], [ 0, 0, 0], [ 18, 8, 0], ..., [123, 88, 55], [119, 83, 50], [122, 87, 57]], [[ 25, 24, 21], [ 16, 7, 0], [ 49, 27, 8], ..., [118, 84, 50], [120, 84, 50], [109, 73, 42]], ...,
と出てくる
想像だけど、[ 59, 62, 63] とかが1pixelのRGBなんじゃないかと思うけど、それ以上のことがわからない
ので、公式ドキュメントを見てみる
from keras.datasets import cifar10 (x_train, y_train), (x_test, y_test) = cifar10.load_data() 戻り値: 2つのタプル: x_train, x_test: shape (num_samples, 3, 32, 32)または(num_samples, 32, 32, 3)のRGB画像データのuint8配列です.これはバックエンド設定のimage_data_formatがchannels_firstとchannels_lastのいずれなのかによって決まります. y_train, y_test: shape (num_samples,) のカテゴリラベル(0-9の範囲の整数)のuint8配列.
とのことだ
なので、x_train, y_train, x_test, y_test に分割してみる
(x_train, y_train), (x_test, y_test) = data len(x_train) → 50000 len(y_train) → 50000
多分学習用に50000枚の画像があって、x_trainには画像データが、y_trainにはその正解のタグが入ってるんだと思う
np.array(x_train).shape → (50000, 32, 32, 3)
画像は32x32のRGB画像なんだと思う とりあえず表示してみよう
...1枚目が何なのかよくわからないけど、2枚目は多分トラックだし多分データの構造の解釈としては間違ってないだろう
これに対して、
np.array(y_train).shape → (50000, 1)
なので y_train は各画像のラベルを表すベクトルなんだろう
1枚目がなんなのか気になるので同じラベルがつけられている画像をいくつか見てみる
y_train[0] → [6] np.where( y_train == [6] ) → (array([ 0, 19, 22, ..., 49962, 49966, 49996]), array([0, 0, 0, ..., 0, 0, 0]))
なんか思っていたのと違う(1つのarrayが返されると思っていたけど2個返ってきた)けど、とりあえず0, 19, 22, ... 49962, 49966, 49996は多分同じ種類の画像なんだろうからそれらを見てみる
なるほど、カエルだ
ついでにx_test, y_testも一応確認しておこう
np.array(x_test).shape → (10000, 32, 32, 3) np.array(y_test).shape → (10000, 1)
ということで、今回のサンプルは32x32のRGB画像とそのラベルになっているんだということがわかった
次回はサンプルを実際に動かしてこれらの画像を分類してみたい