『ゼロから作るDeep Learning』3章続き
# ニューラルネットワークの問題は、回帰問題と分類問題に大別できる # 回帰問題とは、入力データから数値予測を行う問題(例 入力:人物画像 → 出力:体重予測) # 分類問題とは、入力データがどのクラスに属するかという問題(例 入力:人物画像 → 出力:男性クラスor女性クラス) # 回帰問題では恒等関数を使い、分類問題ではソフトマックス関数softmaxを使う # ソフトマックス関数は、分子に入力信号の指数関数、分母にすべての入力信号の指数関数の和から構成される def softmax(x): return np.exp(x) / np.sum(np.exp(x)) # 指数関数の値が巨大になりすぎる場合のオーバーフロー対策として、 # 補正値を導入する必要がある(通常、補正値は入力信号の中で最大の値) def softmax(x): c = np.max(x) # オーバーフロー対策の補正値 return np.exp(x - c) / np.sum(np.exp(x - c)) # 例 import numpy as np import my_module as my a = np.array([0.3, 2.9, 4.0]) y = my.softmax(a) print(y) #=> [ 0.01821127 0.24519181 0.73659691] print(np.sum(y)) #=> 1.0 # ソフトマックス関数の出力は、0から1の間の実数で、総和は1なので確率として解釈できる # ソフトマックス関数を適用しても、元データの大小関係は変わらない # 機械学習の問題を解く手順として、「学習」と「推論」の2フェーズのうち、推論フェーズではソフトマックス関数は省略する # 出力層のニューロン数は、分類したいクラス数に設定する (例 入力:数字画像 → 出力層:10クラス)