Python
python3
Keras
Keras2.0

kerasでOne-hotのラベルを作成する

はじめに

kerasで分類を行う際,教師ラベルはOne-hotベクトル(1-of-k表現)にしなければならないので,簡単にOne-hotベクトルを作成する方法を備忘録としてまとめます.

One-hot

1つだけHigh(1)で他はLow(0)で表現されるビット列のこと.(Wikipedia)
例) 2を3次元のOne-hotで表現する場合は(0, 0, 1)となる.

作り方

環境

  • Python 3.6.0 :: Anaconda custom (64-bit)
  • keras 2.0.4 (backend: Tensorflow)
  • Tensorflow 1.1.0

コード

import numpy as np
from keras.utils import np_utils
# Using TensorFlow backend.

y = np.array([0, 1, 0, 2, 0, 1, 0, 2])  # 元のラベル
# array([0, 1, 0, 2, 0, 1, 0, 2])

one_hot_y = np_utils.to_categorical(y)  # One-hotにしたラベル
# array([[ 1.,  0.,  0.],
#        [ 0.,  1.,  0.],
#        [ 1.,  0.,  0.],
#        [ 0.,  0.,  1.],
#        [ 1.,  0.,  0.],
#        [ 0.,  1.,  0.],
#        [ 1.,  0.,  0.],
#        [ 0.,  0.,  1.]])

以上です.
最大値に合わせてその次元数のOne-hotを作成してくれるのがいいですね.

おわりに

  • 一行で済むので楽ですね.
  • 今後も自分の備忘録的なものになっていきそうな予感….