Pocket
LINEで送る

ディープラーニングで使う損失関数の、二乗和誤差と交差エントロピー誤差。

二乗和誤差

二乗和誤差は、差の二乗を全部足して2で割る。

def nijowagosa(y, t):
    return 0.5 * np.sum((y - t)**2)

y = np.array([0.2, 0.03, 0.8])
t = np.array([0, 0, 1])

print(nijowagosa(y, t))

交差エントロピー誤差


$$E = -\displaystyle \sum_{k}t_k \log y_k$$

logは底がeの自然対数を表すそうです。np.logでできます。ディープラーニングで使うときは、yが出力で、tが正解ラベルです。正解ラベルは正解を1とし、間違いを0とすると、正解ラベル以外のものは全部0になるので無視できて、-log yになります。間違いのやつ無視していいのかなと思いましたが、間違いのやつを高確率と判断した場合、ソフトマックス関数では正解の確立が低くなるので問題ないのかなと思いました。

def cross_error(y, t):
    delta = 1e-7
    return -np.sum(t * np.log(y + delta))

y = np.array([0.2, 0.03, 0.8])
t = np.array([0, 0, 1])
print(cross_error(y, t))

deltaは、np.log(0)が-infを出すことに対する対策です。超小さい数を加えています。

Pocket
LINEで送る


コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。