活性化関数:Softmax関数
Softmax関数は出力層の活性化関数としてよく利用されるニューラルネットの構成要素である。まず、Softmax関数【torch】を参照すること。
簡単な例
ベクトル型のテンソルを与えた場合。
code:softmax1.py
import torch as pt
import torch.nn as nn
softmax = nn.Softmax(dim=0)
X = pt.tensor(10, 20, 5, 5, dtype=pt.float)
y = softmax(X)
print('y:', y)
print('y.sum():', y.sum())
code:結果.py
y: tensor(4.5398e-05, 9.9995e-01, 3.0589e-07, 3.0589e-07)
y.sum(): tensor(1.0000)
入力データのうち、最も値の大きい20に対応する要素の確率が最大の9.9995e-01となっている。
備考:
ベクトル型=1次元なので軸の向きは「dim=0」のみ指定できる。
sumメソッド【torch】を用いてベクトルの総和を求めた結果は1となっている。出力が確率として解釈できることが確認できる。
多次元の場合
2次元のテンソルを与える。この場合、確率をとる範囲を2方向に対して考える必要がある。
code:softmax2.py
import torch as pt
import torch.nn as nn
softmax0 = nn.Softmax(dim=0) # 縦方向
softmax1 = nn.Softmax(dim=1) # 横方向
X = pt.tensor(10, 20, 5, 5], [11, 10, 20, 0, dtype=pt.float)
y0 = softmax0(X)
print('y:', y0)
y1 = softmax1(X)
print('y:', y1)
code:結果.py
y0: tensor([2.6894e-01, 9.9995e-01, 3.0590e-07, 9.9331e-01,
7.3106e-01, 4.5398e-05, 1.0000e+00, 6.6929e-03])
y1: tensor([4.5398e-05, 9.9995e-01, 3.0589e-07, 3.0589e-07,
1.2339e-04, 4.5392e-05, 9.9983e-01, 2.0608e-09])
dim=0の場合、縦方向にみた4本のベクトルに対してsoftmax関数を適用している。縦に並んだ2要素の和$ \approx 1となっている。
dim=1の場合、横方向にみた2本のベクトルに対してsoftmax関数を適用している。y1の0行目はsoftmax1.pyで示した結果と同じである。
/icons/hr.icon
※ ブラウザのバックボタンで戻る
https://scrapbox.io/files/650186366eac6a001b2177bf.png