zoukankan      html  css  js  c++  java
  • siameseNet网络以及信号分类识别应用

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

    siameseNet简介

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

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

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

    Siamese Network有两个结构相同,且共享权值的子网络。分别接收两个输入X1 与X2 ,将其转换为向量Gw(X1) 与Gw(X2) ,再通过某种距离度量的方式计算两个输出向量的距离Ew 。

    训练Siamese Network采用的训练样本是一个tuple (X1,X2,y) ,标签y=0 表示X1 与X2 属于不同类型(不相似、不重复、根据应用场景而定)。y=1 则表示X2 与X2 属于相同类型(相似)。

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

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

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

    总结下来:

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

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

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

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

    参考

    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

  • 相关阅读:
    TeamWork#3,Week5,Introduction to the "take-away" Sale Selection Project
    TeamWork#3,Week5,The First Meeting of Our Team
    TeamWork#2,Week 5,Our Measurement of Contribution to the Team
    TeamWork#1,Week 5,Suggestions for Team Project
    TeamWork#2,Week 2,We are sixsix!
    TeamWork#1,Week 2,Learn In Team
    必应词典手机版(IOS版)与有道词典(IOS版)之软件分析【功能篇】【用户体验篇】
    Daily Scrum1 11.3
    团队项目之分工
    团队项目之开题scrum meeting
  • 原文地址:https://www.cnblogs.com/ytxwzqin/p/9683490.html
Copyright © 2011-2022 走看看