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

 
ジュ
私は彼と連絡を取るようにします - 彼は長い間姿を消しています。もちろん、MQL5によるOpenCLの専門記事もあれば最高です。特に今は。

JavaDevは 1ヶ月以上Skypeを使って いませんが、いかがお過ごしですか?

これは、OpenCLが どのように機能するかを示す彼のコードの一部です。

[05.06.2011 17:29:59] JavaDev:    __kernel void MFractal(                           \r\n"
"                        float x0,                    \r\n"
"                        float y0,                    \r\n"
"                        float x1,                    \r\n"
"                        float y1,                    \r\n"
"                        uint  max,                   \r\n"
"         __global       uint *out)                   \r\n"
"     {//------------------------------------------   \r\n"
"         size_t  w = get_global_size(0);             \r\n"
"         size_t  h = get_global_size(1);             \r\n"
"         size_t gx = get_global_id(0);               \r\n"
"         size_t gy = get_global_id(1);               \r\n"


"         float dx = x0 + gx * (x1-x0) / (float) w;           \r\n"
"         float dy = y0 + gy * (y1-y0) / (float)h;           \r\n"

"         float x  = 0;                               \r\n"
"         float y  = 0;                               \r\n"
"         float xx = 0;                               \r\n"
"         float yy = 0;                               \r\n"
"         float xy = 0;                               \r\n"

"         uint i = 0;                                  \r\n"
"         while ((xx+yy)<4 && i<max) {                \r\n"
"            xx = x*x;                                \r\n"
"            yy = y*y;                                \r\n"
"            xy = x*y;                                \r\n"
"            y = xy+xy+dy;                            \r\n"
"            x = xx-yy+dx;                            \r\n"
"            i++;                                     \r\n"
"      }                                              \r\n"

"      if (i == max) {                                \r\n"
"         out[w*gy+gx] = 0;                           \r\n"
"      } else {                                       \r\n"
"        out[w*gy+gx] = (uint)((float)0xFFFFFF/(float)max)*i;                \r\n"
"    }                                               \r\n"
"   }//--------------------------------------------   \r\n"

 

   int calcOCL() {
      ulong startTime = GetTickCount();
      CL_STATUS status;
      cl_mem data_buf;
      data_buf = ctx.CreateBuffer(CL_MEM_ALLOC_HOST_PTR,CL_MEM_READ_WRITE,m_SizeX*m_SizeY,FLOAT,status);
      if (status!=CL_SUCCESS) {
         Alert("CreateBuffer: ", EnumToString(status));
         return (-1);
      }
      float x0 = -2;
      float y0 = -0.5;
      float x1 = -1;
      float y1 =  0.5;
      uint  max = iterations;
      
      
      kernel.SetArg(0,x0);
      kernel.SetArg(1,y0);
      kernel.SetArg(2,x1);
      kernel.SetArg(3,y1);
      kernel.SetArg(4,max);
      kernel.SetArg(5,data_buf);
      
      uint offset[2] =  {0,0};
      uint work  [2];  work[0]= m_SizeX; work[1]= m_SizeY;
      uint group [2];  group [0] = wgs; group [1] = 1; 
      
      status = queue.NDRange(kernel, 2, offset, work, group);
      oclFlush(queue);
      
      for (int y=0;y<m_SizeY;y++) {
         status = queue.ReadBuffer(data_buf,true,y*m_SizeX,m_SizeX,Line[y].Pixel);
         if (status!=CL_SUCCESS) {
            Alert("ReadBuffer: ", EnumToString(status));
            break;
         }
      }
      oclFinish(queue);
      
      data_buf.Release();
      queue.Release();
      uint endTime = GetTickCount();
      return (int)(endTime-startTime);
   }
   
   uint calcMQL() {
      uint startTime = GetTickCount();
      float x0 = -2;
      float y0 = -0.5;
      float x1 = -1;
      float y1 =  0.5;
      uint  max = iterations;
      uint  w = m_SizeX;
      uint  h = m_SizeY;
      
      for (uint gy =0;gy<h;gy++) {
         for (uint gx =0;gx<w;gx++) {
            float dx = x0 + gx * (x1-x0) / w;
            float dy = y0 + gy * (y1-y0) / h;

            float x  = 0;
            float y  = 0;
            float xx = 0;
            float yy = 0;
            float xy = 0;
            uint i = 0;
            while ((xx+yy)<4 && i<max) {
               xx = x*x;
               yy = y*y;
               xy = x*y;
               y = xy+xy+dy;
               x = xx-yy+dx;
               i++;
            }

            if (i == max) {
               Line[gy].Pixel[gx]=0;
            } else {
               Line[gy].Pixel[gx] = (int) (((float)i/max)*0xFFFFFF);
                 }
         }
      }
      uint endTime = GetTickCount();
      return (int)(endTime-startTime);
   }
};
 
グラフ

JavaDevは 1ヶ月以上Skypeを使って いませんが、いかがお過ごしですか?

私は彼に連絡しました、JavaDevは このトピックを見守っています。
 
ジュ
連絡した、JavaDevは このトピックを見守っている。
このプロジェクトがなくならないという希望が見えてきました。)
 

講義1はこちらhttps://www.mql5.com/ru/forum/4956/page23

講義2.生物学的情報処理方法

ネットワークにおける放電の原理を簡単に残して、情報の生物学的変換の本質を簡単に考えてみることにする。例えば、視覚野での情報の変換を考えてみましょう。このトピックは取引とは程遠いものですが、クレバーな思考を描くのに役立ちます。ところで、視覚野をモデル化する試みとして、コホネン写像やスケール自己学習法などのネットワークが多く導入された。つまり、視覚情報は網膜視細胞で電気信号に変換され、網膜神経節細胞(RGC)でフィルターにかけられ、LGN中継細胞を介して視覚野に送られるが、その目的はまだよく分かっていないのだ。網膜神経節細胞はバンドパス空間フィルターとして働き、物体の輪郭を強調する。その仕組みは、Photoshopのエッジ検出機能に非常によく似ています。私たちがモノの境界線を通して世界を認識していることは、とても興味深いことです。視覚野では、フィルターにかけられた画像は、難解な名称や頭字語を持ついくつかの神経層を通過する。視覚情報の変換には、物体の認識を行う「何を」チャンネルと、物体の位置や動きを認識する「どこで」チャンネルが並列に存在する。我々は、網膜と平行に(空間的にではなく、機能的に)配置された2次元の層V1、V2、V4、ITからなる第1チャンネルに興味を持っています。これらの層は非常に複雑な構造になっています。電気信号は、網膜神経節細胞からV1へ、V1からV2へ、といった具合に伝達される。ある層のセルは、前の層のセルからの入力(直接信号伝搬)だけでなく、隣接する層からの入力(層内リカレント接続)も受ける。また、リカレントコネクションというものがあるが、これは理解が浅いため軽視されがちである。視覚野における情報変換は、次のように簡略化した形でグラフ化することができる。

V1にある単純細胞S1は、輪郭(物体の境界線)の素片、つまり、傾斜角度が異なる、長さが異なる、極性が異なる(暗い背景に明るい線、明るい背景に暗い線)、2次元空間の異なる位置にある線の短いセグメントをフィルタリングしている。各S1細胞は基本的に、ある傾きと長さの狭い「スリット」を通して画像のある部分を「見て」、その部分の輪郭が「スリット」と傾き、長さ、極性が一致したときだけ反応する。

複合細胞C1もV1層に存在する。S1単純細胞と同様に、画像の一定範囲内にある所定の傾きと長さを持つ短い輪郭のセグメントに反応するが、そのセグメントと平行にずれることにはあまり感度がない(シフト不変性)。

単純細胞S2はV2層とV4層に存在する。傾斜と長さの異なる2本の直線セグメントからなる、より複雑な形状の空間フィルターである(例:G、T、L、V、X)。画像のさまざまな場所で、この図形に反応するのです。

複合細胞C2(複合細胞C1)は、V2層とV4層に存在する。また、傾きや長さの異なる2本の直線からなる、より複雑な形状の空間フィルタでもあるが、これらの形状の平行移動にはあまり感度が高くない。

ビューセル(またはシンプルセルS3)はIT層にある。方向や大きさの異なる、さらに複雑な形状(オブジェクト)にも敏感に反応する。

オブジェクトセレクトセル(またはコンプレックスセルC3)もITレイヤーにある。また、物体の向きや大きさが違っても、配置に関係なく反応する。

このように視覚情報を多層的に変換することで、私たちの脳は画像内の位置や向き、大きさに関わらず物体を認識することができます。 物体の認識(分類)は、視覚野の次の層、前頭前野(PFC)と呼ばれる領域で行われます。

 
このプロジェクトを 何と呼ぼうか。
 
TheXpert です。
何と呼べばいいのだろう。
私への質問であれば、文献上、私が説明したネットワークは階層型ニューラルネットワークと 呼ばれています。
 
TheXpert です。
ロゴを考える :)
ロゴのメトハコと共鳴(仲良し)するようにということです。
 
TheXpert です。
何と呼ぼうか。

メタユニバーサルニューラルネットワーク(MUNN)

それとも普遍性を主張しない?

 
ウラン です。
クレーム?
そうなんですね。でも、それほどでもないんです。知覚は知覚です。どんなネットワークも、知覚器官(入力)からの情報を受け取り、変換するブラックボックスと考えることができる。
 
人工 頭脳