我想通过实现给定的神经网络类来开发一个简单的字符识别程序;一个简单的命令行类型就足够了。
径向基函数神经网络被分配给我,我已经研究了重量训练,输入到隐藏到输出的程序,但我仍然怀疑实现它。我的推荐是(1)和(2)。
10×10二进制对象(表示字符)的简单一维数组是输入。例如,
下面的数组input = array(
0,0,0,1,1,1,1,0,0,0,
0,0,1,0,0,0,0,1,0,0,
0,1,0,0,0,0,0,0,1,0,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1 )
是字符“A”的表示形式:
0 0 0 1 1 1 1 0 0 0
0 0 1 0 0 0 0 1 0 0
0 1 0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
我计划取输入的总重量,并将其与训练集进行比较,如同保存的字母表中其他字符的一维数组,最接近的是预测。
问题是如果以CLRS方式或类似方式呈现而不是数学公式,我倾向于更好地理解算法。我发现很难理解这两篇论文中的解释(在Google搜索中我发现这些论文最容易阅读)。
有人能指出一个RBNFF的友好算法,它接收一个数组并产生一个权重输出吗?如果没有,那么以Layman的方式解释这一点的论文将不胜感激。
答案 0 :(得分:1)
对于我能找到的东西,没有“一种正确的方法”来训练他们。
我能找到的最简单的训练是两种算法的组合
(聚类)获取网络的左侧部分(输入权重和RBF)并进行无监督聚类。您可以尝试硬/软和集群/ RBF的数量。 每个聚类都是单个RBF的表示,其权重与其连接。 如何从拥有集群获取rbf和rbf权重取决于您正在使用的集群。 (如果不清楚,我可以扩展这个)
(神经网络)通过使用聚类的输出作为普通单层神经网络的输入,从最后一步求解原始RBFNN的左侧部分。
可能更容易找到容易解释的这些更原始的算法
发现了一些“伪”代码,其解释可能更好地解释了它(用C#编写)
http://msdn.microsoft.com/en-us/magazine/dn532201.aspx
(据说)工作python代码
https://github.com/andrewdyates/Radial-Basis-Function-Neural-Network