初学siameseNet网络,希望可以用于信号的识别分类应用。此文为不间断更新的笔记。

siameseNet简介

全连接孪生网络(siamese network)是一种相似性度量方法,适用于类别数目多但是每类的样本数少的分类问题。

Siamese Network 是一种神经网络的框架,而不是具体的某种网络,就像seq2seq一样,具体实现上可以使用RNN也可以使用CNN。

简单的说,Siamese Network用于评估两个输入样本的相似度。网络框架:

siameseNet网络以及信号分类识别应用

Siamese Network有两个结构相同,且共享权值的子网络。分别接收两个输入Ew 。

训练Siamese Network采用的训练样本是一个tuple X2 属于相同类型(相似)。

LOSS函数的设计应该是:
1. 当两个输入样本不相似(y=0 )时,距离Ew 越大,损失越小,即关于Ew 的单调递减函数。
2. 当两个输入样本相似(y=1 )时,距离Ew 越大,损失越大,即关于Ew 的单调递增函数。

Loss函数怎么定义,其实就是Logistic Regression的Loss函数,这里值得注意的是最后一层的激活函数要用Sigmoid Function。Loss函数如下:

siameseNet网络以及信号分类识别应用

L+(X1,X2) 表示y=1 时的LOSS, L−(X1,X2) 表示y=0 时的LOSS,则LOSS函数可以写成如下形式

siameseNet网络以及信号分类识别应用

总结下来:

1、输入不再是单个样本,而是一对样本,不再给单个的样本确切的标签,而且给定一对样本是否来自同一个类的标签,是就是0,不是就是1
2、设计了两个一模一样的网络,网络共享权值W,对输出进行了距离度量,可以说l1、l2等。
3、针对输入的样本对是否来自同一个类别设计了损失函数,损失函数形式有点类似交叉熵损失。

最后使用获得的损失函数,使用梯度反传去更新两个网络共享的权值W。

这个网络主要的优点是淡化了标签,使得网络具有很好的扩展性,可以对那些没有训练过的类别进行分类,这点是优于很多算法的。而且这个算法对一些小数据量的数据集也适用,变相的增加了整个数据集的大小,使得数据量相对较小的数据集也能用深度网络训练出不错的效果。

实验的时候要注意,输入数据最好打乱,由于这样去设计数据集后,相同类的样本对肯定比不相同的样本对数量少,在进行训练的时候最后将两者的数据量设置成相同数量。

siameseNet网络以及信号分类识别应用

 

参考

https://blog.csdn.net/thriving_fcl/article/details/73730552

https://github.com/ardiya/siamesenetwork-tensorflow

https://blog.csdn.net/sxf1061926959/article/details/54836696

https://www.jianshu.com/p/1df484d9eba9?utm_source=oschina-app

相关文章:

  • 2021-05-23
  • 2021-05-30
  • 2021-04-23
  • 2021-12-13
  • 2021-12-29
  • 2021-09-01
  • 2021-05-08
猜你喜欢
  • 2022-12-23
  • 2021-04-06
  • 2021-11-13
  • 2021-12-24
  • 2021-06-09
  • 2021-12-10
  • 2022-01-09
相关资源
相似解决方案