"New Neural "は、MetaTrader 5プラットフォーム用のオープンソース・ニューラルネットワークエンジンプロジェクトです。 - ページ 5

 
レナート

セーフシステム」DLLはありません。

私は主張しません :) いいえ、そうではありません。
 

ループの代わりに再帰を用いたユニバーサルネットワークを作ることを提案します。ネットワーク構築のポイントは、トポロジーマップを作成することです。

トポロジーマップは、どの点がどの点に接続されているかが明記された2次元の表である。このような図を用いて、古典的なトポロジーを書いたり、グラフィカルトポロジーエディターを用いて独自のトポロジーを作成することができる。

コードを説明する図 P.12

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Mem
  {
   double            m;
public:
                     Mem(void){};
                    ~Mem(void){};
   void              set(double m_){m=m_;};
   double            get(){return(m);};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class ObjMem
  {
public:
   ObjMem           *prev;// предыдущий
   Mem              *obj; // объект памяти
   ObjMem           *next;// последующий
   ObjMem           *side;// боковой
                     ObjMem(void){obj=new Mem();};
                    ~ObjMem(void){delete obj;};
   void              ListPrev(ObjMem *obj){prev=obj;};
   void              ListNext(ObjMem *obj){next=obj;};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class NeuroBase
  {
public:
   ObjMem           *in[];// входы
   ObjMem           *wg[];// веса
   ObjMem           *zo[];// задержка
   Mem              *ou;  // выход
                     NeuroBase(void){ou=new Mem();};
                    ~NeuroBase(void){delete ou;};
   void              ExportMem_In(Mem *ex,int i){in[i].obj=ex;};
   void              ExportMem_Wg(Mem *ex,int i){wg[i].obj=ex;};
   void              ExportMem_Zo(Mem *ex){zo[0].obj=ex;};
   Mem              *ImportMem_In(int i){return(in[i].obj);};
   Mem              *ImportMem_Wg(int i){return(wg[i].obj);};
   Mem              *ImportMem_Zo(int i){return(zo[i].obj);};
   virtual void      work(){/* вызов суммирования перемноженных пар*/};
   virtual void      training(){/* вызов расчёта ошибки*/};
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Net
  {
   NeuroBase        *n[];
public:
                     Net(void){};
                    ~Net(void){};
   void              direct();  // прямой ход
   void              revers();  // обратный ход
   void              topology();// создание топологии
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Net::topology()
  {
/*    создаём массив нейронов
      связываем массив в список
      создаём связные списки нейновесов и боковые пары
      создаём связывание входов и выходов
      создаём связывание входов и операторов задержки (если нужно)
      связывем веса нейронов с внешним массивом
      связываем выходы последнего слоя с внешним массивом
      связываем входы первогого слоя с внешним массивом      
   */
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Net::direct()
  {
//  вызов расчёта нейронов от первого до последнего
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Net::revers()
  {
//  вызов расчёта нейронов от последнего до  первого
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
 

ニューロン、ニューロン内のリストにリンクし、入力と出力をリンクすることで、学習アルゴリズムを作成する際の問題(ワークフローの問題も)を避けることができ、ネットワーク自体がどこに何を割り当てるべきかを知ることができるようになります。

 
レナート
ちなみに、私は御社の社内命名・コーディング基準に強く反対しています。
 
TheXpert です。
ちなみに、社内のネーミングやコーディングの基準には強く反対していますね。

ここに選択の余地はない。人それぞれ基準や確立した理念がある(私のはメタ引用とも違う)。

しかし、metaquotesの規格は、利用可能な最悪のものではありません。だから、誰も損をしないようにするためには、一つの規格で済ませるしかないんです。この場合、メタクォートからの引用になります。

 
sergeev: この状況では、メタクォートからの引用でしょう。
私のも載せようかな?)
 
ウラン です。

ループの代わりに再帰を用いたユニバーサルネットワークを作ることを提案します。ネットワーク構築のポイントは、トポロジーマップを作成することです。

トポロジーマップは、どの点がどの点に接続されているかが明記された2次元の表である。このような図を使って、古典的なトポロジーを書いたり、グラフィカルなトポロジーエディターを使って独自のものを作ったりすることが可能になる。

様々なトポロジーや視覚的な理解を得るためには、2次元のアレイで十分なのでしょうか?

 
セルゲイ

様々なトポロジーや視覚的な理解を得るためには、2次元のアレイで十分なのでしょうか?

いいえ。
 
セルゲイ

様々なトポロジーや視覚的な理解を得るためには、2次元のアレイで十分なのでしょうか?


トポロジーの暗号化についてはそうですが、視覚的な理解については、専門家だけが、視覚的な認識から正しく地図を作ることができるグラフィカルカーネルがより良いのです。

基本的には、マップは「どこから」と「どこへ」の2つのセルからなる構造の1次元配列で、さらにマップヘッダーには、ニューロンの数、各ニューロンが持つタイプ、ニューロンが持つ重みの数、遅延演算子のランクといった情報を含める必要があります。

ですから、完全に視覚的に理解するためには2次元では不十分で、2次元の構造体の配列を持ち、各入力の型、重みの数、演算子の遅延順位、接続、遅延セルからのリンクなどを書き込めるようにするのがよいでしょう。

一般に、「と遅延セルからのリンク」は不要で、入力に接続されているので、入力のリンクには遅延のあるリンクの情報も格納される。

 
図やクソを描くためのオンラインドローイングツールをアドバイスしてくれる人はいますか?