上下文
我正在尝试使用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
答案 0 :(得分:1)
您需要制作自定义顶点。在这里查看Vertex实现:https://github.com/deeplearning4j/deeplearning4j/tree/master/deeplearning4j/deeplearning4j-nn/src/main/java/org/deeplearning4j/nn/graph/vertex/impl。我认为L2Vertex将与您想要的最相似。