はじめに: Deep Leraning for us
これは東大松尾研究室が公開している Deep Learning for us を参考にしています。
one-hot 表現とは
Deep Learning for us の Lesson 1 では、手書きの画像が与えられて、これが 0〜9 のどれなのか分類する問題が挙げられています。
この時、0〜9というのを数字で扱ってしまうと問題が起こります。0と9は数字的には遠く、0と1は数字的には近いのですが、今回の学習で2つの数値の差は関係ありません(「間隔尺度」ではない)。同様に数字の大小も関係ありません(「順序尺度」ではない)。これは「名義尺度」なのです。
そこで、DL4USのテキストにも書いてあるとおり、one-hot表現というベクトル表現を使います。
Keras を使った one-hot 表現への変換
tensorflow をインストールしておいてください
pip install tensorflow
keras の to_categorical
関数を使うことでone-hot表現への変換ができます。
from tensorflow.keras.datasets import mnist from tensorflow.keras.utils import to_categorical # x: 手書きの画像(28x28の画像) # y: 正解のラベル(1〜9) (x_train, y_train), (x_test, y_test) = mnist.load_data() # yの値は名義尺度なので one-hot 表現に変換します # 変換前 # [5 0 4 ... 5 6 8] のような数字の配列になっている print(y_train) # yの名義尺度の値をone-hot表現へ変換 y_train = to_categorical(y_train) y_test = to_categorical(y_test) # one-hot 表現に変換する print(y_train) """こういう表現になっているはず [[0. 0. 0. ... 0. 0. 0.] [1. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 0. 0.] ... [0. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 0. 0.] [0. 0. 0. ... 0. 1. 0.]] """