Hel*_*ili 2 neural-network conv-neural-network tensorflow
这是对三元组学习的简短回顾。我使用三个具有共享权重的卷积神经网络来生成人脸嵌入(锚、正、负),损失描述如下。
三重态损失:
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)
Run Code Online (Sandbox Code Playgroud)
当我只选择硬三元组 ( distance(anchor, positive) < distance(anchor, negative)) 时,损失非常小:0.08。当我选择所有三元组时,损失变得更大0.17855。这些只是 10 000 个三联体对的测试值,但我在实际集合(600 000 个三联体对)上得到了类似的结果。
为什么会出现这种情况?这是对的吗?
我使用 SGD 进行动量,从学习率 0.001开始。
以下是关于三元组硬度的术语的快速回顾:
d(a,p) + margin < d(a,n)d(a,n) < d(a,p)d(a, p) < d(a, n) < d(a, p) + margin你在这里描述的是:
当我仅选择硬三元组时(距离(锚点,正值)<距离(锚点,负值))
实际上是选择半困难三元组和简单三元组。你删除了困难的三元组,所以你的损失更小。
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |