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 将与您想要的最相似。
上下文
我正在尝试使用 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 将与您想要的最相似。