ニューラルネットワーカーに嬉しい、MT4用のクイック&フリーライブラリ - ページ 9

 
これは16グリッドの委員会です、作成されるファイルを見ることができます。
 
Henry_White >> :

出力ニューロンが1つのグリッドがあったとして、16の出力を得るにはどうすればいいのか・・・!?それとも16ネットの委員会?

そうなんです。

 

皆さん、こんにちは。

二晩前からこのコードに取り組んでいるんだ。

void ann_prepare_input () {
    int i;
    double res = 0;
	 for( i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 
      if (MathAbs( res) > 1) {
         if ( res > 0) {
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }
      } else {
         InputVector[ i] = res;            
      }
    }
}

にどんな意味があるのか理解できません。

if (MathAbs( res) > 1) {
         if ( res > 0) {
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }
      } else {
         InputVector[ i] = res;            
      }

resの値が1より大きくできない場合。

この点については、もちろん秘密でなければ説明をお願いします。

 
alex_r >> :

皆さん、こんにちは。

二晩前からこのコードに取り組んでいるんだ。

にどんな意味があるのか理解できません。

resの値が1より大きくできない場合。

この点については、秘密でなければ説明をお願いします。

NSの入力には正規化された値(1;-1)を供給すること。そうでない場合、NSトレーニングは不定な結果になる可能性があります。

 

さて、RESはどのように計算されるのでしょうか?

条件

(MathAbs(res) > 1)
は決して満たされることはなく、入力は
res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0
で、ここでは99.99%のケースで、当然ながら1と-1以外が得られます。
そうすれば
for( i = 0; i < AnnInputs; i++) {
      res = (iRSI(Symbol(), 0, 30, PRICE_OPEN, i) - 50.0) / 50.0; 

         if ( res > 0) {                 
            InputVector[ i] = 1.0;            
         } else {
            InputVector[ i] = -1.0;            
         }        

    }

であれば、1 と -1 のみ

それとも私が間違っているのでしょうか?

 
alex_r >> :

>> それとも私が間違っているのでしょうか?

間違っている。ここでは、すべてが正しく機能します。もっとコードをよく勉強したほうがいい。とてもシンプルでわかりやすいですね。あなたの「//」の意味が理解できません。完全に意味を「殺して」います。

iRSIは基本的に0から100までの値を出し、まれに範囲外の異常値を出す(だから (MathAbs(res) > 1) )ので、resは99.9%の場合1と-1の範囲に、InputVectorは100%の範囲に入ることになります。

各オペレータの内訳を待っているのであれば、ここにはプログラミングのレッスンをする能力のある人はいないと思います。そして、このセクションについては、オフトピックになります。これについては、フォーラムの他のセクションに申し込むか、私に連絡してください。

PS.他人のコードに「コメント」しない(コメントした方が良い)。他の人に誤解を与えかねないし、口調が悪いだけだ。もし、著者に同意できないのであれば、異論を唱えてください。

 

コメント付きを削除しました。

今説明すると、res>0、ここで0はRSI指標のレベル50に対応し、我々は1を割り当て、そうでなければ我々は-1を割り当てる。

何が明確でないのか?最小限のコードと、それ以外のもの。

ソースコードに書かれているように、データの正規化の主な条件が満たされていないのです。

もう1つゼロをフィルタリングすることですが、この場合、それほど重要ではありません。

 
あなたのVariantは-1か1のどちらかを返します。 さて、これは何のためでしょうか?そして、THISでどうやってネットワークを鍛えるんだ?というか、WHY?この国家の「二元性」の有用性とは何でしょうか。ここからどうやってパターンを作り、ネットワークを学習 させるのか?
 
Henry_White >> :

NS入力には正規化された値(1;-1)を入力する必要があります。そうでなければ、NSをトレーニングしても、不確かな結果になる可能性がある。

もしかしたら、この投稿で混乱されたかもしれませんね。ここでは、2値状態ではなく、範囲を意味しています。

 
alex_r >> :

ソースコードに書かれているように、データ正規化の主な条件は満たされていません。

グリッド入力(レイヤー1)はレンジ:-1;1に設定されたシグモイドであるため、あなたは勘違いしています。したがって、入力の値が-1~1の範囲にあることは、正規化の必要十分条件となる。


あなたが構築しようとしているのは,シグモイド関数をカスタム関数 Signum(input) に置き換えることで,入力データの離散性を過小評価し,学習セットに相互に矛盾するデータが大量に含まれるような状況を作り出しているのです.