私は人工ニューラルネットワークを使って技術的プロセス(多数の非線形方程式)をモデル化しようとしています。この機能には、いくつかの入力と複数の出力があります(たとえば、50入力、150出力 - すべて浮動)。異なる人工ニューラルネットワークフレームワーク(ffnet、tensorflow)による結果のレプリケート
私はpython library ffnet(fortranライブラリのラッパー)を大いに成功させました。特定のデータセットのエラーは0.2%を大幅に下回ります。
完全に接続されたグラフとこれらの追加パラメータを使用しています。
Basic assumptions and limitations:
Network has feed-forward architecture.
Input units have identity activation function, all other units have sigmoid activation function.
Provided data are automatically normalized, both input and output, with a linear mapping to the range (0.15, 0.85). Each input and output is treated separately (i.e. linear map is unique for each input and output).
Function minimized during training is a sum of squared errors of each output for each training pattern.
私は1つの入力層、1つの隠れ層を使用しています(サイズ:入力ベクトル+出力ベクトルの大きさの2/3)と出力層。私はscipy共役勾配オプティマイザを使用しています。
ffnetの欠点は、長いトレーニング時間とGPUを使用する機能がないことです。したがって、私は別のフレームワークに切り替えて、ケラをTensorFlowとバックエンドとして選択しました。
私は、以前の構成をモデル化しようとしています(!)
model = Sequential()
model.add(Dense(n_hidden, input_dim=n_in))
model.add(BatchNormalization())
model.add(Dense(n_hidden))
model.add(Activation('sigmoid'))
model.add(Dense(n_out))
model.add(Activation('sigmoid'))
model.summary()
model.compile(loss='mean_squared_error',
optimizer='Adamax',
metrics=['accuracy'])
結果ははるかに悪いですが、エラーが訓練の数千エポックで0.5%までです。 ffnetトレーニングは292エポックで自動的にキャンセルされました。さらに、ネットワークレスポンスと検証ターゲットの違いは、0を中心にしていませんが、ほとんどが負です。 私はすべてのオプティマイザと異なる損失関数を試しました。また、BatchNormalizationをスキップして、ffnetと同じ方法で手動でデータを正規化しました。何も役立ちません。
ケラスでより良い結果を得るための提案はありますか?
同じ最適化方法を使用していますか?あなたは 'keras'と' Adamax'を使っているようです。 –
kerasには共役勾配オプティマイザが含まれておらず、Adamaxはこれまで最高の結果を出しています。 – JanM
Adamaxのような従来のNNオプティマイザは、TensorFlowを使用して、scipyインターフェイス(https:// github)を使用してlBFGSオプティマイザをプラグインすることができます。com/tensorflow/tensorflow/issues/446 –