renom.layers.loss

class renom.layers.loss.mean_squared_error. MeanSquaredError

教師データ と入力データ x 間の誤差を平均二乗誤差で評価し、その結果を返す。

E(x) = \frac{1}{2N}\sum_{n}^{N}\sum_{k}^{K}(x_{nk}-y_{nk})^2

reduce_sum がFalseの場合行列の要素を足しあわれず, 戻り値は行列となる.その結果, 以下の式に基づいて戻り値が計算される.Trueの場合, 戻り値はスカラ値となる.

E({\bf x}) = \frac{1}{2N}({\bf x}-{\bf y})^2

N : バッチサイズ

パラメータ:
  • x ( ndarray , Node ) -- 入力データ
  • y ( ndarray , Node ) -- 教師データ
  • reduce_sum ( bool ) -- Trueが与えられた場合, 行列の要素は足し合わされ, 戻り値はスカラ値となる.
戻り値:

平均二乗誤差関数

戻り値の型:

( Node , ndarray)

Raises:

AssertionError -- 引数に与えられたテンソルの次元が2未満の時、Assertion エラーを出力する。

Example

>>> import renom as rm
>>> import numpy as np
>>>
>>> x = np.array([[1, 1]])
>>> y = np.array([[-1, -1]])
>>> print(x.shape, y.shape)
((1, 2), (1, 2))
>>> loss = rm.mean_squared_error(x, y)
>>> print(loss)
[4.]
>>> loss = rm.mean_squared_error(x, y, reduce_sum=False)
>>> print(loss)
[[ 2.  2.]]
class renom.layers.loss.clipped_mean_squared_error. ClippedMeanSquaredError ( clip=1.0 , reduce_sum=True )

順伝播ではデータ x y 間の平均二乗誤差を返すが、逆伝播時はclipに指定された値で勾配をクリッピングする。

逆伝播時は以下の式に基づいて勾配が計算される。

\frac{dE}{dx}_{clipped} = max(min(\frac{dE}{dx}, clip), -clip)
パラメータ:
  • x ( ndarray , Node ) -- 入力データ
  • y ( ndarray , Node ) -- 教師データ
  • clip ( float , tuple ) -- クリッピングに用いる閾値
  • reduce_sum ( bool ) -- Trueが与えられた場合, 行列の要素は足し合わされ, 戻り値はスカラ値となる.
戻り値:

Clipping mean squared error.

戻り値の型:

( Node , ndarray)

Raises:

AssertionError -- 引数に与えられたテンソルの次元が2未満の時、Assertion エラーを出力する。

class renom.layers.loss.cross_entropy. CrossEntropy

教師データ と入力データ x 間の誤差を平均二乗誤差で評価し、その結果を返す。

E(x) = \sum_{n}^{N}\sum_{k}^{K}(-y*ln(x+\epsilon))

" N はバッチサイズ. \epsilon はゼロ除算を防ぐための小数.

パラメータ:
  • x ( ndarray , Node ) -- 入力データ
  • y ( ndarray , Node ) -- 教師データ
  • reduce_sum ( bool ) -- Trueが与えられた場合, 行列の要素は足し合わされ, 戻り値はスカラ値となる.
戻り値:

交差エントロピー誤差

戻り値の型:

( Node , ndarray)

Raises:

AssertionError -- 引数に与えられたテンソルの次元が2未満の時、Assertion エラーを出力する。

Example

>>> import renom as rm
>>> import numpy as np
>>>
>>> x = np.array([[1.0, 0.5]])
>>> y = np.array([[0.0, 1.0]])
>>> print(x.shape, y.shape)
((1, 2), (1, 2))
>>> loss = rm.cross_entropy(x, y)
>>> print(loss)
[0.6931471824645996]
>>> loss = rm.cross_entropy(x, y, reduce_sum=False)
>>> print(loss)
[[0.          0.69314718]]
class renom.layers.loss.sigmoid_cross_entropy. SigmoidCrossEntropy

教師データ と、入力データをシグモイド活性化関数にかけた z をクロスエントロピーでより評価し、その結果を返す。

\begin{split}z_{nk} &= \frac{1}{1 + \exp(-x_{nk})} \\ E(x) &= -\frac{1}{N}\sum_{n}^{N}\sum_{k}^{K}y_{nk}\log(z_{nk})+(1-y_{nk})\log(1-z_{nk})\end{split}
パラメータ:
  • x ( ndarray , Node ) -- 入力データ
  • y ( ndarray , Node ) -- 教師データ
  • reduce_sum ( bool ) -- Trueが与えられた場合, 行列の要素は足し合わされ, 戻り値はスカラ値となる.
戻り値:

sigmoid(x)と教師データy間の交差エントロピー誤差.

戻り値の型:

( Node , ndarray)

Raises:

AssertionError -- 引数に与えられたテンソルの次元が2未満の時、Assertion エラーを出力する。

class renom.layers.loss.softmax_cross_entropy. SoftmaxCrossEntropy

教師データ と、入力データをソフトマックス活性化関数にかけた z をクロスエントロピーでより評価し、その結果を返す。

\begin{split}z_{nk} &= \frac{\exp(x_{nk})}{\sum_{j=1}^{K}\exp(x_{nj})} \\ E(x) &= -\frac{1}{N}\sum_{n}^{N}\sum_{k}^{K}y_{nk}\log(z_{nk})\end{split}
パラメータ:
  • x ( ndarray , Node ) -- 入力データ
  • y ( ndarray , Node ) -- 教師データ
  • reduce_sum ( bool ) -- Trueが与えられた場合, 行列の要素は足し合わされ, 戻り値はスカラ値となる.
Raises:

AssertionError -- 引数に与えられたテンソルの次元が2未満の時、Assertion エラーを出力する。