torch中的成对相似性准则

我想在torch7中实现一个新的准则。

基本上,我有一对样本,对于这对样本,我具有一个归一化的相似度实际值(记为'd')。

在现有的准则中,最接近的是[CosineEmbeddingCriterion] (https://github.com/torch/nn/blob/master/doc/criterion.md#nn.CosineEmbeddingCriterion),它提供了以下的损失:

             ⎧ 1 - cos(x1, x2),                        if y == 1
loss(x, y) = ⎨
             ⎩ max(0, cos(x1, x2) - margin), if y == -1

显然,这是为一对设计的,但这是用于分类问题。

在我的问题中,我想实现一个准则,它提供以下的损失函数: loss(x1, y2, d) = | d - cos(x1,x2) |

不幸的是,与[in this question] (https://stackoverflow.com/questions/33648796/add-my-custom-loss-function-to-torch) 不同,我不能简单地组合现有的准则来做到这一点。

所以我打算从[torch7源文件] (https://github.com/torch/nn/blob/master/CosineEmbeddingCriterion.lua)的痛苦之路上创建一个新的模块。

我的问题如下:

  • 我是否正确,没有其他简单的解决方案?

  • 如果我在torch7中实现自己的准则:

  • 是否有写准则或指南的模板?

  • 我如何检查它是否有效?(如何对其进行单元测试?)

(对我来说,编写一个似乎正确的准则非常容易--但实际上并不是这样)

非常感谢任何提示!

点赞
用户2669077
用户2669077

你只需要为你的标准编写 updateOutputupdateGradInput 函数,然后就可以像使用任何其他标准一样使用它。这里是一个框架。

https://github.com/torch/nn/blob/master/BCECriterion.lua

2016-03-08 21:35:16