Deeplearning とか 人工知能とか

人工知能について勉強している理科大生

活性化関数

ディープラーニングで必須の活性化関数についてまとめます
リファレンスを見ていてSoftmax関数を探したんですが
見つからなくて。。。
どなたかわかる人教えてくださいorz

ReLU

max(0,x)

import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.ops.transforms.Transforms;

INDArray matrixA = Nd4j.create(new float[]{-3,-2,-1,0,1,2,3,4},new int[]{1,8});
matrixA = Transforms.relu(matrixA);
System.out.println("matrixA\n"+matrixA);
出力
matrixA
[0.00, 0.00, 0.00, 0.00, 1.00, 2.00, 3.00, 4.00]

Softmax
出力層への各ノードへの入力に対して同じ個数の出力を計算する
ソフトマックス関数です
ライブラリの中に配列のソフトマックス関数が見当たらなかったので
合計を計算したのちに各成分に割り算を行うことにしました

import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.ops.transforms.Transforms;

INDArray matrixA = Nd4j.create(new float[]{2,3,4,3,1,2,3,4},new int[]{1,8});
float sum = Transforms.exp(matrixA).sumNumber().floatValue();
matrixA = Transforms.exp(matrixA).div(sum);
System.out.println("Softmax:\n"+matrixA);

出力
Softmax:
[0.04, 0.11, 0.29, 0.11, 0.01, 0.04, 0.11, 0.29]