関数ML_calculate_all_xy マニュアル

(The documentation of function ML_calculate_all_xy)

Last Update: 2024/10/9


◆機能・用途(Purpose)

教師データにおける入力層の変数\(x_i^{(0,n)}\)の値を与えて 全ての層での変数\(x_i^{(m,n)}\)およびその線形結合\(y_i^{(m,n)}\)の値を計算する。
Calculate the values of variables \(x_i^{(m,n)}\) and their linear combinations \(y_i^{(m,n)}\) in all layers given the variables in the input layer \(x_i^{(0,n)}\) of the teaching data.


◆形式(Format)

#include <machine_learning/cross_entropy.h>
inline void ML_calculate_all_xy
(const int M,const int N,const int ∗J, double ∗const ∗x0,double ∗∗const ∗W,
 char ∗const ∗func_name, double ∗∗∗∗x, double ∗∗∗∗y)


◆引数(Arguments)

M 中間層の数\(M\)。
The number, \(M\), of intermediate layers.
N 教師データ数\(N\)。
The number, \(N\), of teaching data.
J 各層における変数の個数を並べた要素数\(M+2\)の配列。 各mについてJ[m]\(=J^{(m)}\)とする。
An array of \(M+2\) components composed of the number of variables in each layer; J[m]\(=J^{(m)}\) for each \(m\).
x0 教師データにおける入力層の変数の値を並べた\(N\times J^{(0)}\)の2次元配列。 各n,iについてx0[n][i]\(=x_i^{(0,n)}\)とする。
A 2-D array of \(N\times J^{(0)}\) composed of the values of variables of the teaching data in the input layer; x0[n][i]\(=x_i^{(0,n)}\) for each n and i.
W 各層における線形結合の係数の値のリスト。 サイズの異なる\(M+1\)個の2次元配列W[m] (\(m=0,\cdots,M\)) を並べた「配列の配列」であり、 各W[m]は\(J^{(m+1)}\times [J^{(m)}+1]\)の2次元配列である。 各m,j,iについてW[m][j][i]\(=W_{j,i}^{(m)}\)とする。
A list of the coefficients of linear combinations in each layer, given as an “array of array”, composed of \(M+1\) sub-arrays W[m] (\(m = 0, \cdots, M\)) of mutually different size; each W[m] is a 2-D array of \(J^{(m+1)}\times [J^{(m)}+1]\). The value of each array component is given as W[m][j][i]\(=W_{j,i}^{(m)}\) for each m, j, and i.
func_name 各層における変数の線形結合を用いて次の層の変数を計算する際に用いる数学関数の名前 を並べた要素数\(M+1\)の文字列配列。 各mについてfunc_name[m]は\(f_j^{(m)}\)の関数名を表す。
An array composed of \(M+1\) strings; each array component (string) represents the name of a mathematical function used for the calculation of the variables in each layer from the linear combinations of the previous layer. The value of func_name[m] for each m is a function name of \(f_j^{(m)}\).
x 各層における変数の値の代入先。 宣言しただけのdouble ∗∗∗型変数に&を付けて与える。 関数内で配列の動的メモリが確保され、配列要素の値が設定される。 作成される配列はサイズの異なる\(M+2\)個の2次元配列 (∗x)[m] (\(m=0,\cdots,M+1\)) を並べた「配列の配列」であり、 各(∗x)[m]は\(N\times J^{(m)}\)の2次元配列である。 各m,n,iについて(∗x)[m][n][i]\(=x_i^{(m,n)}\)となる。
Memory into which the values of variables in each layer are to be inserted. Give an empty double ∗∗∗-type variable with &. Within the function, the dynamic memory for an array is allocated and the values of the array components are inserted. The array to be created is an “array of array”, composed of \(M+2\) sub-arrays (∗x)[m] (\(m = 0,\cdots,M+1\)) of mutually different size; each (∗x)[m] is a 2-D array of \(N\times J^{(m)}\). The value of each array component is given as (∗x)[m][n][i]\(=x_i^{(m,n)}\) for each m, n, and i.
y 各層における変数の線形結合の値の代入先。 宣言しただけのdouble ∗∗∗型変数に&を付けて与える。 関数内で配列の動的メモリが確保され、配列要素の値が設定される。 作成される配列はサイズの異なる\(M+1\)個の2次元配列 (∗y)[m] (\(m=0,\cdots,M\)) を並べた「配列の配列」であり、 各(∗y)[m]は\(N\times J^{(m+1)}\)の2次元配列である。 各m,n,jについて(∗y)[m][n][j]\(=y_j^{(m,n)}\)となる。
Memory into which the values of the linear combinations of variables in each layer are to be inserted. Give an empty double ∗∗∗-type variable with &. Within the function, the dynamic memory for an array is allocated and the values of the array components are inserted. The array to be created is an “array of array”, composed of \(M+1\) sub-arrays (∗y)[m] (\(m = 0,\cdots,M\)) of mutually different size; each (∗y)[m] is a 2-D array of \(N\times J^{(m+1)}\). The value of each array component is given as (∗y)[m][n][j]\(=y_j^{(m,n)}\) for each m, n, and j.


◆動作(Behaviour)

引数x,yの配列の動的メモリ確保と配列要素の値の設定を行う。
Allocate dynamic memories for arrays and determine the values of the array components for arguments x and y.


◆使用例(Example)

int M=1;
int J[]={2,2,2};
int N=4;
double x0[][2]
  ={{1.2,3.4},
     {5.6,7.8},
     {9.0,1.2},
     {3.4,5.6}};
double W[][2][3]
  ={{{1.1,2.2,3.3},{4.4,5.5,6.6}},
     {{9.8,7.6,5.4},{3.2,1.0,-1.2}}};
char func_name[][10]={"ReLU","sigmoid"};
double ∗∗∗x;
double ∗∗∗y;
ML_calculate_all_xy(M,N,J,x0,W,func_name,&x,&y);


使用上の注意(Remarks)

この関数における計算時間の約半分は引数x,yの配列の動的メモリの確保に起因する。 したがって条件を変えてx,yの計算を何度も行うプログラムでは 予めx,yの動的メモリの確保を済ませておいて 関数ML_calculate_all_xy_givenMemories で代用するのが良い。
Almost half of the computation time of this function is caused by dynamic allocations of memories for arrays of arguments x and y. To reduce the processing time, function ML_calculate_all_xy_givenMemories is recommended to be used instead of this function in programs that repeat the determination of x and y values many times with various conditions.