chainer.functions.log_softmax(x)[source]

チャンネルごとの対数-ソフトマックス関数。

 

この関数は第2軸に沿ったソフトマックスの対数を演算します。

第2軸に添って 

c=(c1,c2,,cD)c=(c1,c2,…,cD)

x のスライスとします。

各スライス毎に、下記のように定義されている関数f(c)の対数を演算します。

f(c)=exp(c)dexp(cd).f(c)=exp⁡(c)∑dexp⁡(cd).

 

このメソッドは 理論的には log(softmax(x)) と同等ですが、こちらのほうが安定しています。

Note

log(softmax(x)) では x が小さすぎるとき、下位桁あふれが発生することがあります。これはsoftmax(x) が 0を返す可能性があるためで、 log_softmax メソッドのほうが安定しています。

 

Parameters: x (Variable or numpy.ndarray or cupy.ndarray) – 入力値。A-n次元(n≧2)のfloat配列。
Returns: 出力値。A-n次元(n≧2)のxと同じshapeをもつfloat配列。
Return type: Variable
See also

softmax()

 

Example

 


>>> x = np.array([[0, 1, 2], [0, 2, 4]], 'f')
>>> x
array([[ 0., 1., 2.],
[ 0., 2., 4.]], dtype=float32)
>>> F.log_softmax(x).data
array([[-2.40760589, -1.40760589, -0.40760589],
[-4.14293146, -2.14293146, -0.14293146]], dtype=float32)
>>> np.allclose(F.log_softmax(x).data, F.log(F.softmax(x)).data)
True