发现He(凯明)初始化方法。

我们机器视觉中bpnet匹配,是x[n]-hi/ho-yi/yo这样结构,即n-80-1三层bpnet最简单网络。

程序中有几句这样的代码:

 for (int j = 0; j < 80; j++)//80
       {
           for (int i = 0; i < lunkc; i++)//轮廓点数
           {
               hI固定roi[j] += xxxroi[i] * w1固定roi[i, j];
           }
           fanhui.Add(hI固定roi[j]);

}

最后完成3000次训练后,我们做如下操作:

 double forjz = 0;
               for (int i = 0; i < fanhui.Count; i++)
               {                   
                   forjz += fanhui[i];
               }
               double 定型 = forjz / fanhui.Count;

我发现,定型这个值,在【-1,1】之间时,训练很成功,匹配不易出错!当出现-4,5,3,7之类的值,就要差一些。

但是为什么?我不知道!

定型 这个值往上溯源,xxxroi【】是图像灰度,w1固定roi[i, j]是权重参数!

因为,我的结果很稳定,很准确了,我就在没有深究!我一直用这种初始化:

  for (int i = 0; i < size; i++)  //for (int i = 0; i < lunkc; i++)
       
           for (int j = 0; j < 80; j++)
           {

               //  w1[i, j] = 0.1;


               w1固定roi[i, j] = ranroi.Next(-100, 100) / 100f;

}

   w1固定roi[i, j] 在【-1,1】范围内!

其实我们前头除以临时最大,实际是一种归一化方法,只不过很直觉!

这里实际也是归一化!

我曾经也算在相关系数和相关系数匹配上下了功夫,但我没有往上面去想!(归一化的鼻祖)

这里说明,我这种人,属于应用型的,搞出来,就不总结了,反而,失败了,回去总结!

这是很值得反思的!

如果你观察到了,并取得好的结果,一定要总结深挖!不要只做应用型人才,能解决问题!不能解决成功!

当我研究了relu,并发现了he(kaiming)初始化,我才恍然大悟,他在相关系数归一化上下功夫,使用了高斯正态分布n~(0,1)

这两个东西我何尝不熟悉呢?我的形状匹配就是高斯正态分布的功劳!

或许是我沉迷机器视觉,不够专注人工智能!

鱼与熊掌不能兼得!鱼已经收入囊中,开始熊掌之旅!

he(kaiming)参数在bpnet初始化效果观察:

  w1固定roi[i, j] = randomNormalDistribution() /(float) Math.Sqrt(size / 2f);

使用上面这句话:观察到:

 double 定型 = forjz / fanhui.Count;

这个结果始终是零(0)。

附注:1,

 public float randomNormalDistribution()
   {
       double u = 0.0, v = 0.0, w = 0.0, c = 0.0;
       do
       {
           //获得两个(-1,1)的独立随机变量
           u = ranroi.NextDouble() * 2 - 1.0;
           v = ranroi.NextDouble() * 2 - 1.0;
           w = u * u + v * v;
       } while (w == 0.0 || w >= 1.0);
       //这里就是 Box-Muller转换
       c = Math.Sqrt((-2 * Math.Log(w)) / w);
     
       return (float)(u * c);
   }

2,he的功绩在于下面红色的字:

w1固定roi[i, j] = randomNormalDistribution() /(float) Math.Sqrt(size / 2f);

有机会我们可以推导一下!

更多推荐