机器视觉匹配中使用bpnet匹配(五,转人工智能)
发现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);
有机会我们可以推导一下!
更多推荐



所有评论(0)