Context
Я пытаюсь создать модель с 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) Создайте собственный класс слоя.
2) Создайте пользовательскую функцию LossFunction, чтобы применить косинусное сходство к выходным слоям.
Вопросы
1) Уже реализован слой, который реализует косинусное сходство между двумя слоями?
2) Если нет, как я могу реализовать свой собственный слой?
Единственный пример, который я нашел, это: https://github.com/deeplearning4j/dl4j-examples/blob/master/dl4j-examples/src/main/java/org/deeplearning4j/examples/misc/customlayers/CustomLayerExampleReadme.md