14#ifndef SINGLELAYERPERCEPTRON
15#define SINGLELAYERPERCEPTRON
25#include "Statistics.hh"
35 #define arcs_assert(a) (assert(a))
38 #define EventLogVar(a)
101 if constexpr(IT == NnInitTypes::XAVIER){
105 if constexpr(IT == NnInitTypes::HE){
177 if constexpr(DD == NnDropout::ENABLE){
190 if constexpr(DD == NnDropout::ENABLE){
203 if constexpr(DD == NnDropout::ENABLE){
216 if constexpr(DD == NnDropout::ENABLE){
228 if constexpr(DD == NnDropout::ENABLE){
246 if constexpr(DD == NnDropout::ENABLE){
251 for(
size_t i = 0; i < P; ++i){
268 if constexpr(GD == NnDescentTypes::SGD)
CalcSGD(
dW,
db);
273 if constexpr(GD == NnDescentTypes::ADAM)
CalcAdam(
dW,
db);
288 printf(
"xbar = % 16.14e\n",
xbar);
289 printf(
"sigma = % 16.14e\n",
sigma);
290 printf(
"eps = % 16.14e\n",
eps);
291 printf(
"alph = % 16.14e\n",
alph);
292 printf(
"bet = % 16.14e\n",
bet);
293 printf(
"NearZero = % 16.14e\n",
NearZero);
294 printf(
"DropRate = % 16.14e\n",
DropRate);
304 if constexpr(AF == ActvFunc::SOFTMAX){
320 return -sumall(D & loge(Y))/(double)M;
325 template <
size_t NN,
size_t MM>
#define PrintMatrix(a, b)
行列要素表示マクロ(フォーマット指定あり版)
Definition Matrix.hh:35
ActvFunc
活性化関数のタイプの定義
Definition ActivationFunctions.hh:35
NnInitTypes
重み初期化のタイプの定義
Definition NeuralNetParamDef.hh:19
NnDropout
ドロップアウトの定義
Definition NeuralNetParamDef.hh:35
NnDescentTypes
勾配降下法のタイプの定義
Definition NeuralNetParamDef.hh:25
static void f(const Matrix< N, M > &U, Matrix< N, M > &Y)
活性化関数
Definition ActivationFunctions.hh:118
static void fp(const Matrix< N, M > &U, Matrix< N, M > &Y)
活性化関数の微分
Definition ActivationFunctions.hh:177
static void SaveFile(const std::array< double, M > &Data, const std::string &FileName)
1次元std::arrayをCSVファイルに書き出す関数
Definition CsvManipulator.hh:54
static void LoadFile(std::array< T, M > &Data, const std::string &FileName)
CSVファイルから1次元std::arrayに読み込む関数
Definition CsvManipulator.hh:72
行列/ベクトル計算クラス(テンプレート版)
Definition Matrix.hh:44
constexpr TT GetElement(size_t n, size_t m) const
指定した要素番号の値を返す関数
Definition Matrix.hh:489
constexpr void Set(const T1 &u1, const T2 &... u2)
行列要素に値を設定する関数
Definition Matrix.hh:385
constexpr void SetElement(size_t n, size_t m, TT val)
指定した要素番号に値を設定する関数
Definition Matrix.hh:480
constexpr void Get(T1 &u1, T2 &... u2)
行列要素から値を読み込む関数
Definition Matrix.hh:405
乱数生成器
Definition RandomGenerator.hh:22
void GetGaussianRandomMatrix(Matrix< N, M > &Y)
ガウシアン乱数行列を生成する関数
Definition RandomGenerator.hh:88
void GetRandomMatrix(Matrix< N, M > &Y)
乱数行列を生成する関数
Definition RandomGenerator.hh:77
単層パーセプトロンクラス
Definition SingleLayerPerceptron.hh:59
double GetCrossEntropy(const Matrix< M, P > &Y, const Matrix< M, P > &D)
クロスエントロピーを返す関数
Definition SingleLayerPerceptron.hh:319
Matrix< M, P > fpU
活性化関数の微分を通した後の行列
Definition SingleLayerPerceptron.hh:384
Matrix< 1, P > Gb
AdaDelta, Adam用
Definition SingleLayerPerceptron.hh:392
Matrix< N, P > HW
AdaGrad, RMSprop, Adam用
Definition SingleLayerPerceptron.hh:389
size_t SGDcount
Adam勾配降下法用のカウンタ
Definition SingleLayerPerceptron.hh:397
void UpdateWeight(const Matrix< M, N > &Zprev)
重み行列とバイアスベクトルの更新
Definition SingleLayerPerceptron.hh:263
void DispSettings(void)
パーセプトロン設定値の表示
Definition SingleLayerPerceptron.hh:287
Matrix< N, P > dW
重み更新差分値
Definition SingleLayerPerceptron.hh:385
void SaveSettings(const std::string &SettingName)
パーセプトロンの設定をCSVファイルに保存する関数
Definition SingleLayerPerceptron.hh:356
Matrix< N, P > GWhat
Adam用
Definition SingleLayerPerceptron.hh:394
Matrix< 1, P > db
バイアス更新差分値
Definition SingleLayerPerceptron.hh:386
void InitWeight(size_t Nprev)
重み行列の初期化
Definition SingleLayerPerceptron.hh:100
void CalcAdam(const Matrix< N, P > &DiffW, const Matrix< 1, P > &Diffb)
Adam勾配降下法
Definition SingleLayerPerceptron.hh:473
void LoadWeightAndBias(const std::string &WeightName, const std::string &BiasName)
重み行列とバイアスベクトルをCSVファイルとして入力する関数
Definition SingleLayerPerceptron.hh:349
void CalcForwardForTraining(const Matrix< 1, N > &zprev, Matrix< 1, P > &z)
順伝播計算(ベクトル入出力訓練版)
Definition SingleLayerPerceptron.hh:173
~SingleLayerPerceptron()
デストラクタ
Definition SingleLayerPerceptron.hh:87
void SetGainOfMomentumSGD(double epsilon, double alpha)
モーメンタム確率的勾配降下法の更新ゲイン(学習率)の設定
Definition SingleLayerPerceptron.hh:120
void NormalizeInput(Matrix< 1, P > &x)
入力データの正規化(標準化)
Definition SingleLayerPerceptron.hh:334
Matrix< M, P > U
状態行列
Definition SingleLayerPerceptron.hh:376
Matrix< 1, P > DropMask
ドロップアウト用マスクベクトル
Definition SingleLayerPerceptron.hh:399
void NomalizeDataset(Matrix< NN, MM > &x)
生計測データセットの正規化(標準化)
Definition SingleLayerPerceptron.hh:326
void CalcAdaDelta(const Matrix< N, P > &DiffW, const Matrix< 1, P > &Diffb)
AdaDelta勾配降下法
Definition SingleLayerPerceptron.hh:455
Matrix< N, P > GW
AdaDelta, Adam用
Definition SingleLayerPerceptron.hh:391
void CalcAdaGrad(const Matrix< N, P > &DiffW, const Matrix< 1, P > &Diffb)
AdaGrad勾配降下法
Definition SingleLayerPerceptron.hh:431
void CalcRMSprop(const Matrix< N, P > &DiffW, const Matrix< 1, P > &Diffb)
RMSprop勾配降下法
Definition SingleLayerPerceptron.hh:443
Matrix< N, P > W
重み行列
Definition SingleLayerPerceptron.hh:377
double alph
更新ゲイン(Momentum, RMSprop, AdaDelta)
Definition SingleLayerPerceptron.hh:403
Matrix< 1, P > b
バイアスベクトル
Definition SingleLayerPerceptron.hh:378
void SaveWeightAndBias(const std::string &WeightName, const std::string &BiasName)
重み行列とバイアスベクトルをCSVファイルとして出力する関数
Definition SingleLayerPerceptron.hh:341
void SetGainOfSGD(double epsilon)
確率的勾配降下法の更新ゲイン(学習率)の設定
Definition SingleLayerPerceptron.hh:113
void SetGainOfRMSprop(double epsilon, double alpha, double zero)
RMSprop勾配降下法の更新ゲイン(学習率)の設定
Definition SingleLayerPerceptron.hh:137
void CalcDropout(void)
ドロップアウトマスクの計算
Definition SingleLayerPerceptron.hh:245
Matrix< 1, P > fpu
活性化関数の微分を通した後のベクトル
Definition SingleLayerPerceptron.hh:383
void DispBias(void)
バイアスベクトルの表示
Definition SingleLayerPerceptron.hh:282
void CalcForwardForEstimation(const Matrix< 1, N > &zprev, Matrix< 1, P > &z)
順伝播計算(ベクトル入出力推定版)
Definition SingleLayerPerceptron.hh:186
Matrix< 1, P > Gbhat
Adam用
Definition SingleLayerPerceptron.hh:396
Matrix< 1, P > delta
誤差ベクトル
Definition SingleLayerPerceptron.hh:381
double DropRate
ドロップアウト率
Definition SingleLayerPerceptron.hh:406
void CalcForwardForTraining(const Matrix< M, N > &Zprev, Matrix< M, P > &Z)
順伝播計算(ミニバッチ訓練版)
Definition SingleLayerPerceptron.hh:199
double NearZero
ゼロ割回避用のゼロに近い値
Definition SingleLayerPerceptron.hh:405
Matrix< M, P > Delta
誤差行列
Definition SingleLayerPerceptron.hh:382
void CalcSGD(const Matrix< N, P > &DiffW, const Matrix< 1, P > &Diffb)
ヴァニラ確率的勾配降下法
Definition SingleLayerPerceptron.hh:411
void SetDropoutRate(double DropoutRate)
ドロップアウト率の設定
Definition SingleLayerPerceptron.hh:166
Matrix< 1, P > u
状態ベクトル
Definition SingleLayerPerceptron.hh:375
Matrix< 1, P > Hbhat
Adam用
Definition SingleLayerPerceptron.hh:395
void InitWeightUsingGaussianRandom(const double sigma)
重み行列の正規分布乱数による初期化
Definition SingleLayerPerceptron.hh:93
double bet
更新ゲイン(Adam)
Definition SingleLayerPerceptron.hh:404
void CalcMomentumSGD(const Matrix< N, P > &DiffW, const Matrix< 1, P > &Diffb)
モーメンタム確率的勾配降下法
Definition SingleLayerPerceptron.hh:421
Matrix< N, P > HWhat
Adam用
Definition SingleLayerPerceptron.hh:393
Matrix< 1, P > Db
更新ゲイン乗算後のバイアス更新差分値
Definition SingleLayerPerceptron.hh:388
void SetGainOfAdaGrad(double epsilon, double zero)
AdaGrad勾配降下法の更新ゲイン(学習率)の設定
Definition SingleLayerPerceptron.hh:128
void SetGainOfAdam(double epsilon, double alpha, double beta, double zero)
Adam勾配降下法の更新ゲイン(学習率)の設定
Definition SingleLayerPerceptron.hh:156
Matrix< N, P > DW
更新ゲイン乗算後の重み更新差分値
Definition SingleLayerPerceptron.hh:387
SingleLayerPerceptron(SingleLayerPerceptron &&r)
ムーブコンストラクタ
Definition SingleLayerPerceptron.hh:75
Matrix< 1, M > l
1ベクトル
Definition SingleLayerPerceptron.hh:379
RandomGenerator DropRand
ドロップアウト用メルセンヌ・ツイスタ
Definition SingleLayerPerceptron.hh:398
double sigma
データセット正規化(標準化)用の標準偏差
Definition SingleLayerPerceptron.hh:401
void CalcForwardForEstimation(const Matrix< M, N > &Zprev, Matrix< M, P > &Z)
順伝播計算(ミニバッチ推定版)
Definition SingleLayerPerceptron.hh:212
void SetGainOfAdaDelta(double alpha, double zero)
AdaDelta勾配降下法の更新ゲイン(学習率)の設定
Definition SingleLayerPerceptron.hh:146
double GetLoss(const Matrix< M, P > &Y, const Matrix< M, P > &D)
訓練/テスト誤差を返す関数
Definition SingleLayerPerceptron.hh:301
Matrix< 1, P > Hb
AdaGrad, RMSprop, Adam用
Definition SingleLayerPerceptron.hh:390
SingleLayerPerceptron()
コンストラクタ
Definition SingleLayerPerceptron.hh:62
void CalcDeltaForOutputLayer(const Matrix< M, P > &Y, const Matrix< M, P > &D, Matrix< M, N > &WDelta)
出力層用の誤差行列の計算
Definition SingleLayerPerceptron.hh:239
void CalcDelta(const Matrix< M, P > &WDeltaNext, Matrix< M, N > &WDelta)
入力層と内部層(隠れ層)用の誤差行列の計算
Definition SingleLayerPerceptron.hh:225
Matrix< M, 1 > lT
1ベクトルの転置
Definition SingleLayerPerceptron.hh:380
void DispWeight(void)
重み行列の表示
Definition SingleLayerPerceptron.hh:277
double eps
更新ゲイン(SGD, Momentum, AdaGrad, RMSprop)
Definition SingleLayerPerceptron.hh:402
double xbar
データセット正規化(標準化)用の平均値
Definition SingleLayerPerceptron.hh:400
void LoadSettings(const std::string &SettingName)
CSVファイルからパーセプトロンの設定を読み込む関数
Definition SingleLayerPerceptron.hh:364
static void MeanRow(const Matrix< N, M > &U, Matrix< 1, M > &y)
行列Uの横方向の平均を計算して縦ベクトルを出力する関数
Definition Statistics.hh:57
static double StandardDeviation(const Matrix< N, M > &U)
行列U全体の標準偏差を求める
Definition Statistics.hh:244
static double Mean(const Matrix< N, M > &U)
行列U全体の平均を計算する
Definition Statistics.hh:43