你好,我正在进行一个项目,使用ANN和emgucv在C#的Visual Studio 2010中识别钢笔。我有一个关于ANN的问题。我必须训练ANN来识别钢笔。因此,我在输出层设置了一个神经元,用于两种分类(钢笔或非钢笔)。我用1100张钢笔的图片训练了ANN,我的疑问是:对于第二类(第一类是钢笔),我是否需要用非钢笔的图片来训练ANN?或者,如果我展示一张ANN未训练过的图片,ANN会认为它不是钢笔吗?
回答:
正如@Beaker指出的,ANN会假设所有东西都是钢笔。然而,你可以使用输出的水平来预测它是钢笔的可能性。但你真正想要做的,是用钢笔和非钢笔的图片来训练它。你还可以尝试使用两个输出节点,一个用于钢笔,一个用于非钢笔。这通常是人们进行神经网络分类的方式,尽管使用单一输出节点也应该可以。请注意,你选择的激活函数会影响节点间输入和输出的范围(例如,sigmoid函数期望0-1,tanh函数期望-1到1)。此外,网络的层数和每个隐藏层中的神经元数量可能会产生很大影响。确保你至少有一个隐藏层。如果只有输入层和输出层,效果可能不会很好。
如果你没有非钢笔的图片,我建议使用一些在线的随机物体图片来训练负面案例。然而,既然你似乎已经有了使用这个系统的计划,给它展示与训练后将要看到的图片相似的图片,会带来更好的性能。