先说这个验证的实验结论。
结论:
卷积网络识别的结果的各个位置具有多样性,即若一个神经网络识别出多个结果的时候,各个结果间即使数值相同,之间也不存在相互的影响。
推论1:
若要识别一个物体的n个不同特征,则必须至少提供共2*n个对应位置的不同特征的图片(即特征间组合不用考虑交叉但需全覆盖)进行识别才能使模型具有预测性。
推论2:
若要识别一个物体的n个相同特征,则最好将图片切分成n个1个特征的图片,再识别可以使模型具有最优识别效果
在前几周对卷积神经网络的学习过程之中,最终的结果虽然能够输出多个识别的值,但是这些输出的多个值都有一个特征,就是每种值都表示的是相同的含义,例如验证码中虽然能够识别4个字母的值,但是这4个值都表示了相同的含义,即字母,在最终识别所形成的矩阵的结果,最终第一个位置的值为0表示的就是识别的字母为A,第二个位置为1表示的就是识别的第二个位置的结果为B,那么这个时候问题来了,就是如果我想要识别的第一个位置的值和第二个位置的值表示不同含义的话,那么卷积的结果是否能够正确地表示出来呢?
带着这个疑惑,我并不打算百度来解决这个问题,相反想通过一次实践,来尝试是否能够表示对应的值。
我的思路是,自己生成一系列两种颜色红蓝里面含有数字1或2的图片,其中训练集中,第一个位置A,B表示的是图片中字符串含有值1,2,第二个位置的A,B表示图片中的红蓝,分别为A和B。
然后卷积网络识别结果不同位置含义具有多重性的话,若图片中含有数字1同时为蓝色的字符串,则预测识别的结果第一个位置为A,第二个位置为B。若含有数字2且字符串红色,这预测识别的结果第一个位置为B,第二个位置为A,依此类推
首先要解决第一个问题,生成一系列随机的带有上述标签的训练图片集合。
以下运用了我的方法库生成的图片代码如下:
生成图片示例
接着就对图片进行训练,在上述实例中生成了2000张图片,实际训练的时候仅仅生成了200张,因为训练时长的关系,仅仅训练了100次,没有使识别率达到100%就当成模型,各位在实际中不能这么干呀
训练样本中的标签:(以下仅仅列出22个)
编写对应的卷积神经网络的模型
生成对应预测集合
预测模型搭建:(所加载的训练模型仅仅训练200张图片,迭代100次同时结果并样本符合率还没有达到100%,多几次就能达到100%了,不过由于是验证并不需要太过于精确的模型)
、
运行截图:
预测结果与正确结果对比:
预测结果:
10,BB
7,AB
15,AA
8,AB
14,BB
0,AB
1,AB
16,BA
11,AA
6,AA
18,BB
4,AB
9,AB
3,AB
5,AA
13,AB
12,AA
2,AA
19,AA
17,AA
正确标签结果:
0,AB
1,BB
2,AA
3,BB
4,AB
5,AA
6,AA
7,AB
8,AB
9,AB
10,BB
11,AA
12,BA
13,AB
14,AB
15,AA
16,BA
17,AA
18,BB
19,AA
经过一一对比得,
14 ,1,3,12 的第一个位置,也就是识别数字的时候有所出入,这也可以理解,因为搭建的模型比较粗糙。其中第二个位置的识别正确率达到100%
由于训练模型较为粗糙,在对文字进行识别的这个过程出现了少许的错误判断可以理解,因此可以认为各个识别位置之间即使数值相同也可以正常识别,由此得出结论:
卷积网络识别的结果的各个位置具有多样性,即若一个神经网络识别出多个结果的时候,各个结果间即使数值相同,之间也不存在相互的影响。
推论:若要识别一个物体的n个特征,则必须至少提供共2*n个对应位置的不同特征的图片(即特征间组合不用考虑交叉但需全覆盖)进行识别才能使模型具有预测性。
推论2:若要识别一个物体的n个相同特征,则最好将图片切分成n个1个特征的图片,再识别可以使模型具有最优识别效果