Tensorflow 使用半硬三元组时,损耗降低
这是对三胞胎学习的简短回顾。 我使用三个具有共享权重的卷积神经网络来生成人脸嵌入(锚定,正,负),并描述损失 三重态损耗:Tensorflow 使用半硬三元组时,损耗降低,tensorflow,neural-network,conv-neural-network,Tensorflow,Neural Network,Conv Neural Network,这是对三胞胎学习的简短回顾。 我使用三个具有共享权重的卷积神经网络来生成人脸嵌入(锚定,正,负),并描述损失 三重态损耗: anchor_output = ... # shape [None, 128] positive_output = ... # shape [None, 128] negative_output = ... # shape [None, 128] d_pos = tf.reduce_sum(tf.square(anchor_output - positive_out
anchor_output = ... # shape [None, 128]
positive_output = ... # shape [None, 128]
negative_output = ... # shape [None, 128]
d_pos = tf.reduce_sum(tf.square(anchor_output - positive_output), 1)
d_neg = tf.reduce_sum(tf.square(anchor_output - negative_output), 1)
loss = tf.maximum(0., margin + d_pos - d_neg)
loss = tf.reduce_mean(loss)
当我只选择硬三元组(distance(锚定,正)
)时,损失非常小:0.08。
当我选择所有三元组时,损失变得更大0.17855。这些只是10000个三重态对的测试值,但我在实际集合(600000个三重态对)上得到了类似的结果
为什么会发生这种情况?对吗
我使用的是有动量的SGD,从学习率0.001开始,你服用tf.sqrt(d_pos)和tf.sqrt(d_neg)后得到了什么?服用tf.sqrt(d_pos)和tf.sqrt(d_neg)后得到了什么?这里是关于三胞胎硬度的术语的快速回顾:
- 简单三联体:由于
d(a,p)+边距
- 硬三联体:负向比正向更靠近锚定的三联体,即
d(a,n)
- 半硬三联体:负片不比正片更靠近锚点,但仍有正损耗的三联体:
d(a,p)
实际上是选择半硬三胞胎和简单三胞胎。您正在移除硬三胞胎,因此您的损失更小。以下是有关三胞胎硬度的术语的简要概述:
- 简单三联体:由于
d(a,p)+边距
- 硬三联体:负向比正向更靠近锚定的三联体,即
d(a,n)
- 半硬三联体:负片不比正片更靠近锚点,但仍有正损耗的三联体:
d(a,p)
实际上是选择半硬三胞胎和简单三胞胎。您正在移除硬三胞胎,因此您的损失更小。请原谅我的noobness请原谅我的noobness