lawlite19 / blog_gitalk_comments

个人博客gitalk评论仓库
http://lawlite.me
2 stars 0 forks source link

Triplet-Loss原理及其实现 | Lawlite的博客 #3

Open lawlite19 opened 5 years ago

lawlite19 commented 5 years ago

http://lawlite.me/2018/10/16/Triplet-Loss%E5%8E%9F%E7%90%86%E5%8F%8A%E5%85%B6%E5%AE%9E%E7%8E%B0/

一、 Triplet loss1、介绍 Triplet loss最初是在 FaceNet: A Unified Embedding for Face Recognition and Clustering 论文中提出的,可以学到较好的人脸的embedding 为什么不适用 softmax函数呢,softmax最终的类别数是确定的,而Triplet loss学到的是一个好的embedding,相似的图

kingfou commented 5 years ago

这排版,秒赞!! 内容写的nice啊。受益良多

lawlite19 commented 5 years ago

这排版,秒赞!! 内容写的nice啊。受益良多

thank you

Wang-Zeyu commented 5 years ago

您好有个问题想请教一下: 假设输入一共有8个triplet,经过一遍前向得到hard的triplet是6个,loss计算的是这6个的和再除以6(其实也是8个的和除以6,因为两个easy的loss是0)。 感觉代码里反向传播的时候还是在这8个输入上做的,实际上是不是就是相当于把loss放大了一些。 为什么不是用选出来的6个hard_triplet重新走一遍正向再走一遍反向,之前计算8个的前向不做更新只做选择?

garyliu0816 commented 5 years ago

博主牛逼,帮大忙了

lawlite19 commented 5 years ago

您好有个问题想请教一下: 假设输入一共有8个triplet,经过一遍前向得到hard的triplet是6个,loss计算的是这6个的和再除以6(其实也是8个的和除以6,因为两个easy的loss是0)。 感觉代码里反向传播的时候还是在这8个输入上做的,实际上是不是就是相当于把loss放大了一些。 为什么不是用选出来的6个hard_triplet重新走一遍正向再走一遍反向,之前计算8个的前向不做更新只做选择?

感觉没必要啊,因为loss本身就是这6的。

Wang-Zeyu commented 5 years ago

@lawlite19

您好有个问题想请教一下: 假设输入一共有8个triplet,经过一遍前向得到hard的triplet是6个,loss计算的是这6个的和再除以6(其实也是8个的和除以6,因为两个easy的loss是0)。 感觉代码里反向传播的时候还是在这8个输入上做的,实际上是不是就是相当于把loss放大了一些。 为什么不是用选出来的6个hard_triplet重新走一遍正向再走一遍反向,之前计算8个的前向不做更新只做选择?

感觉没必要啊,因为loss本身就是这6的。

反向传播的时候用到的隐层的输出还是8个的吧,还是说在经过mask和求和之后,自动微分机制在反向传播计算的时候会自动选择6个的隐层输出。:)我刚开始了解所以有些理解的可能不对

lawlite19 commented 5 years ago

@lawlite19

您好有个问题想请教一下: 假设输入一共有8个triplet,经过一遍前向得到hard的triplet是6个,loss计算的是这6个的和再除以6(其实也是8个的和除以6,因为两个easy的loss是0)。 感觉代码里反向传播的时候还是在这8个输入上做的,实际上是不是就是相当于把loss放大了一些。 为什么不是用选出来的6个hard_triplet重新走一遍正向再走一遍反向,之前计算8个的前向不做更新只做选择?

感觉没必要啊,因为loss本身就是这6的。

反向传播的时候用到的隐层的输出还是8个的吧,还是说在经过mask和求和之后,自动微分机制在反向传播计算的时候会自动选择6个的隐层输出。:)我刚开始了解所以有些理解的可能不对

loss的定义是valid的triplet的损失,那就是6个,反向传播的时候也是6个,我的理解。

fanyike commented 5 years ago

semi hard的好像是没有margin的啊

lawlite19 commented 5 years ago

@fanyike semi hard的好像是没有margin的啊

margin之内

fanyike commented 5 years ago
Screen Shot 2019-05-09 at 10 47 46

看paper上似乎没有了margin?

lawlite19 commented 5 years ago
Screen Shot 2019-05-09 at 10 47 46

看paper上似乎没有了margin?

image 后面说了在margin内,即: image

fanyike commented 5 years ago

是我看的不仔细了,感谢解答🙏

daduguai commented 4 years ago

兄弟,看到你的博客,真的秒杀了90%网上的博客,现在很多博客都是你抄我的,我抄你的,看来看去,都是一样。原创的真的很少,而且高质量的原创的更少。楼主博客还是很用心的,必须给点赞

lawlite19 commented 4 years ago

@daduguai 兄弟,看到你的博客,真的秒杀了90%网上的博客,现在很多博客都是你抄我的,我抄你的,看来看去,都是一样。原创的真的很少,而且高质量的原创的更少。楼主博客还是很用心的,必须给点赞

谢谢你的点赞 :smile:

fuchao01 commented 4 years ago

你好,我想问下,我有1w多label,想做成TFRecord,这个怎么区分正样本和负样本,如何才能充分训练

He-haitao commented 4 years ago

博主,你好,为什么会出现 number of tensors 3136 do not match the number of lines in metadata,然后我在tensorboard可视化里面只可以看到3136个点,以及那个平面化是如何观察到的呀

He-haitao commented 4 years ago

minist_enbeddings 这个在我的tensorboard里面也没法选择,只有一个model/fc_1/dense/kernal这个选择,然后前面加载那个metadata还可以点击label选择的,现在忽然又不可以了,不清楚什么情况,而且报错前面问的number of tensors 3136 do not match the number of lines in metadata,然后选择model/fc_1/dense/kernal 后面会有输出的shape 3136*64,看不太懂这边是怎么操作的

yanmi1995 commented 4 years ago

您好,请问您的代码中没有写accuracy,我自己写了一下accuracy:accuracy = tf.metrics.accuracy(labels=labels,predictions=tf.argmax(embeddings),name='acc_op') # 计算精度我发现训练完成后,accuracy很小,想请教一下是否我对embeddings的理解有误?