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

DL4J with ComputationGraph : Cosine similarity between layers

上下文

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

有两种嵌入:一种用于用户,一种用于物品。

val conf = new NeuralNetConfiguration.Builder()
  .updater(new Sgd(0.01))
  .graphBuilder()
  .addInputs("item_input", "user_input")
  .addLayer("item_embedding", new DenseLayer.Builder().nIn(5).nOut(5).build(), "item_input")
  .addLayer("user_embedding", new DenseLayer.Builder().nIn(5).nOut(5).build(), "user_input")
  // Something
  .build()

val net = new ComputationGraph(conf)
net.init()

问题

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

然后我想训练模型以最大化正例的相似度并最小化负例的相似度。

正例 = 用户对商品感兴趣

反例=用户对商品不感兴趣

可能的解决方案

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

1) 创建自定义图层class.

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

问题

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

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

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