問題タブ [encog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1484 参照

validation - Encog を使用した正しいトレーニングと検証

Encogで何か間違っていると思います。私が見たすべての例では、特定のトレーニング エラーに達するまで単純に TRAIN し、結果を出力します。勾配が計算され、非表示レイヤーの重みが更新されるのはいつですか? これはすべて training.iteration() 関数内に含まれていますか? プログラムで TRAINING エラーが減少し続けているため、これは意味がありません。これは、重みが変化していることを意味しているように見えますが、ネットワークを介して検証セットをまだ実行していないためです (構築時にトレーニングセットから切り離して分離しました)。最初のデータ) を使用して、検証エラーがまだトレーニング エラーと共に減少しているかどうかを判断します。

また、検証セットをトレーナーにロードし、compute() を使用してネットワーク経由で実行しましたが、検証エラーは常にトレーニング エラーに似ているため、トレーニングからの同じエラーかどうかを判断するのは困難です。一方、テストのヒット率は 50% 未満です (学習していない場合に期待)。

さまざまな種類のバックプロパゲーション手法があることは知っていますが、特に勾配降下法と回復力のあるバックプロパゲーションを使用する一般的な手法があります。ネットワークのどの部分を自分で手動で更新する必要がありますか?

0 投票する
1 に答える
246 参照

neural-network - Encog - ハイブリッド ニューラル ネットワークの使用

シミュレーテッド アニーリングをフィードフォワード ニューラル ネットワークと組み合わせて使用​​することは、ローカル ミニマムに達したときに単純に重みをリセットする (そして隠れ層を新しいエラー バレーに配置する) こととどのように異なるのでしょうか? シミュレートされたアニーリングは、重みを移動してグローバルな最小値を見つけるためのより体系的な方法として FFNN によって使用されるため、反復は 1 回のみです。検証エラーがトレーニングエラーに比べて増加し始めるたびに実行されます...エラー関数全体で現在の位置をゆっくりと移動しますか? この場合、シミュレーテッド アニーリングはフィードフォワード ネットワークから独立しており、フィードフォワード ネットワークはシミュレーテッド アニーリングの出力に依存します。そうでなく、シミュレートされたアニーリングが FFNN からの結果に直接依存している場合、シミュレートされたアニーリング トレーナーが独自の重みを更新する方法に関して、この情報をどのように受け取るかわかりません(それが理にかなっている場合)。例の 1 つはサイクル(複数の反復) に言及していますが、これは私の最初の仮定には当てはまりません。

network.fromArray() と network.toArray() が使用されているさまざまな例を見てきましたが、network.encodeToArray() と network.decodeFromArray() しか表示されません。あるタイプのネットワークから別のタイプのネットワークに重みを転送する最新の方法 (v3.2) は何ですか? これは、遺伝的アルゴリズムなどを使用する場合と同じですか?

0 投票する
1 に答える
673 参照

c# - カスタム エラー関数を使用したニューラル ネットワーク

フィードフォワード ネットワークを使用して予測アプリケーションを開発しています。私が抱えている問題は、予測したいデータがほとんどトレンドになっていることです。Therfore、私が開発しようとしているモデルは次のとおりです。

ここで、x は入力ベクトル、f(x) はニューラル ネットワーク、g(t) は時間に応じたトレンド関数 (線形、指数) です。

これを行う最も簡単な方法は、エラー関数を変更することです。これにより、傾向が含まれます。

私が理解しているように、ソリューションは理論的には非常に単純です。モデル パラメーター (ニューラル ネット ウェイト + トレンド モデル パラメーター) に応じた勾配は次のように計算できるからです。

ニューラル ネットワークの最適化手法を使用してトレンドと共に NN を検索し、ニューラルの重みが更新されているのと同じ方法でトレンド モデルのパラメーターを更新することは、理論的な問題はないと思います。

問題は、Encog でこれを行う方法を管理できなかったことです。学習ルールは、可能な限り高速になるように書かれているため、理解するのが非常に困難です。また、Encog のニューラル ネットワーク構造は固定されているため、パラメーターのベクトルを拡張して誤差関数と勾配式を書き換えるだけでは簡単ではないと思います。

0 投票する
1 に答える
678 参照

java - Encog ライブラリを使用した遺伝的アルゴリズムは、トレーニングに何時間もかかり、正確ではありませんか?

私は研究で Java で Encog 2.4.0 を使用して、フォントの数字 (0-9) 認識における逆伝播と遺伝的アルゴリズムを評価しています。JavaCV を使用して数字 (画像) を 0 と 1 のテキスト ファイルに処理しています。各行は 1 つのフォント画像画像を表します。各フォント (線) には 256 の属性 (0 または 1) があります。私のネットワーク入力ノード番号は 256 で、出力ノードは 10 (クラス) で、ネットワークでシグモイド活性化関数を使用しています。私の出力も0と1に正規化されました(たとえば、1000000000は0を意味し、0100000000は1を意味し、9まで続きます)。異なるトレーニング セット (100 ~ 700 サンプル) と、学習率と運動量の異なるパラメーターを使用したテスト セット (50 ~ 300) を使用した 11 回のテスト実行により、精度と速度の両方を備えた逆伝播パフォーマンスに非常に満足しています (10 秒から< 4 分)。しかし残念ながら :

ネットワークの入出力構造は、XOR の例に似ています。XOR 入力は 4 X 2 の配列で、出力は 4 X 1 です。

私の場合は、「サンプル数」X 256 が入力で、「サンプル数」X 10 が出力です。

誰かが私が間違っているところに光を当てることができますか?

ありがとう、ホス

0 投票する
1 に答える
143 参照

android - モバイルの外部 C# ライブラリ

Unity プロジェクトで外部 C# ライブラリを使用して、iOS および Android 用にコンパイルすることは可能ですか?

私の場合、ゲームでencogライブラリを使用する必要があります。ネイティブの iOS/Android コードの変換で問題が発生することはありますか?

0 投票する
1 に答える
272 参照

java - Encog: 重みが増え続ける

Encog ライブラリを使用してニューラル ネットワークをトレーニングしようとしています。

(トレーニング (60%)、クロス検証 (20%)、テスト (20%) に) 分割する前のデータセット (〜 7000 例) は、次のように線形に正規化されます。

ターゲット (理想) データセット (これも線形正規化) は次のようになります。

私はこのようにネットワークを初期化します:

私はResilientPropagationトレーナーを使用しています(同様に試しBackpropagationました):

トレーニングの過程で、トレーナーによって報告されるエラーは一般的に減少しています。トレーニングが終了したら、ウェイトをダンプします。

それらは通常、非常に大きいか、または非常に小さいです。シグモイドを使用すると、予測がいくつかの数値に収束することになります。たとえば、上記の重み (500 回の反復後に取得) は次のようになります。

ネットワークまたはトレーニングの構成に問題があるようです。私のネットワークが低分散に苦しんでいる場合、少なくとも目標範囲内の結果が生成されます。分散が大きい場合は、ターゲットに一致します。そして今、それはターゲットを完全に逃しています。

予測がかなり外れているにもかかわらず、エラーが減少し、かなり低くなるのはなぜですか? 上記の私の例で明らかな間違いを見た人はいますか? 私はまだニューラルネットワークの経験があまりありません。

0 投票する
1 に答える
219 参照

machine-learning - 出力ニューロンの数を減らす

キャラクターの速度を 2 次元で制御するためにニューラル ネットワークをトレーニングしようとしています。x と y は -1 ~ 1 m/秒です。現在、範囲を 0.1 m/秒間隔に分割しているため、精度を 0.01 に上げると 400 個の出力ニューロン (20 x 値 * 20 y 値) になり、最終的に 40k 出力ニューロンになります。出力ニューロンの数を減らす方法はありますか?