孪生网络之笔迹鉴别baseline

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/huanhuan_Coder/article/details/82717495

  最近在用孪生网络跑笔迹鉴别,传送门https://github.com/sorenbouma/keras-oneshot,作者不仅上传了代码,还链接了相关的论文和实验用的数据。写一下思路:

1、 设计网络

   该网络是传统的卷积层+池化层的组合,具体如下图
这里写图片描述

2、 获取训练数据

get_batch

  在介绍如何获取训练数据之前,首先介绍一下数据集,数据集中包括 N 个文件夹,每个单独的文件夹包括 M 幅图片,同一个文件夹中的文字是同一个人书写,不同文件夹对应着不同的书写人。数据集中 N 个文件夹被分成训练集和测试集,我将数据集中 2 3 的数据即 2 N 3 的文件夹用来作为训练集,剩余的 1 3 的数据即 N 3 的文件夹作为测试集。
  

  首先设置batch_size大小,在实验中我设置为10,因为孪生网络是判断两幅图片是不是同一人书写的,所以每次向网络输入的是成对的照片,我们将batch-size设置为10即我们每次训练的时候向网络输入10对即20幅图片。
这里写图片描述
  上面图片的意思是,前 1 2 batch_size的图片是来自同一个文件夹,后 1 2 batch_size的图片是来自不同的文件夹,我们设置数据的label,因为前 1 2 对的图片来自同一个书写人,所以前 1 2 的label设置为1,后 1 2 的label设置为0,将数据和对应的label输入网络。

3、训练

train_on_batch

'''
训练是在一个batch_size上进行评估,返回值是loss值。
将第二步中的数据和label输入到网络中,其中x对应数据,y对应标签
'''
train_on_batch(self,x,y,batch_size,verbose = 0)

4、测试

make_oneshot_task
这里写图片描述
  从第1个文件夹中选择一张图片,与上面选出的图片进行比较。label设置:label[0]=1,其余label为0。如果比较结果与label一致,则判断正确,反之判断错误。

猜你喜欢

转载自blog.csdn.net/huanhuan_Coder/article/details/82717495