エンジニアリングとお金の話

都内で働くエンジニアの日記です。投資と技術の話題がメインです。

【技術】kerasのnp_utils.to_categoricalについて

ディープラーニングの勉強を最近はじめた。手始めに評判がいいkerasを使用している。

参考にしているサイトは以下のサイトでひたすら写経している感じである。

www.procrasist.com

その中でMINISTの求め方について以下のコードが記述されている。

from keras.datasets import mnist
from keras.utils import np_utils
(X_train, y_train),(X_test,y_test) = mnist.load_data()
X_train = X_train.reshape(60000,784).astype('float32')
X_test = X_test.reshape(10000,784).astype('float32')
#[0,255]の値を[0,1]に正規化
X_train /= 255.0
X_test /= 255.0
# 1 of Kのベクトルに変換
y_train = np_utils.to_categorical(y_train, 10)
y_test = np_utils.to_categorical(y_test, 10)

ministデータを読み込んで、0 OR 1に正規化しているのだけど、np_utils.to_categoricalで行っている1 OF Kのベクトルに変換がよくわからなかった。調べてみると以下の記事を発見。

may46onez.hatenablog.com

Kerasはラベルを数値ではなく、0or1を要素に持つベクトルで扱うらしい つまりあるサンプルに対するターゲットを「3」だとすると[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]みたいな感じにしなければならない。

np_utils.to_categoricalを使用する事により、ラベルをベクトルに変換出来る。今回のコードは

y_train = np_utils.to_categorical(y_train, 10)

となっているが、第一引数がベクトルに変換したいラベルで、第二引数がベクトル配列の個数となる。今回は0〜9の範囲なので10個の配列が必要となる為、10を設定している。