ソフトマックス関数

2020/12/10

Python3.6.7

ニューラルネットワークなどでよく出る確率に変換するための関数。

numpyを使った方が高速
https://code.tiblab.net/python/numpy/softmax

けど、勉強を兼ねて、pure pythonでの実装

import math

def softmax(xs):
    xmax = max(xs)
    e_sum = 0
    e_xs = []
    for x in xs:
        e_x = math.exp(x - xmax)
        e_xs.append(e_x)
        e_sum += e_x
    result = []
    for e_x in e_xs:
        result.append(e_x/e_sum)
    return result

scores = [3.0, 1.0, 0.2]
print(softmax(scores))
# [0.8360188027814407, 0.11314284146556013, 0.05083835575299916]