DL4J with ComputationGraph:图层之间的余弦相似度

时间:2018-05-07 08:51:08

标签: cosine-similarity deeplearning4j

上下文

我正在尝试使用DL4J创建模型。

有两个嵌入:一个用于用户,一个用于项目。

JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
$jcFields = FieldsHelper::getFields('com_content.article', $item, true);
$array = json_decode(json_encode($jcFields), True);
$fields = [];
foreach ($array as $field) {
  array_push($fields,$field['name'],$field['value'],$field['rawvalue']);
} 

问题

最后,我想计算这两个嵌入之间的余弦相似度。

然后我想训练模型以最大化正面例子的相似性,并在负面例子上最小化它。

正面示例=用户对项目感兴趣

否定示例=用户不会对该项目感兴趣

可能的解决方案

我找到了两种可能的解决方案。

1)创建自定义图层类。

2)创建一个自定义LossFunction以在输出层上应用余弦相似性。

问题

1)是否已经实现了一个在两层之间实现余弦相似性的层?

2)如果没有,我该如何实现自己的图层? 我找到的唯一例子如下:https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/misc/customlayers/CustomLayerExampleReadme.md

1 个答案:

答案 0 :(得分:1)

您需要制作自定义顶点。在这里查看Vertex实现:https://github.com/deeplearning4j/deeplearning4j/tree/master/deeplearning4j/deeplearning4j-nn/src/main/java/org/deeplearning4j/nn/graph/vertex/impl。我认为L2Vertex将与您想要的最相似。