DL4J с ComputationGraph: косинусное сходство между слоями - PullRequest
0 голосов
/ 07 мая 2018

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

1 Ответ

0 голосов
/ 02 июня 2018

Вы захотите создать собственную вершину. Проверьте реализации Vertex здесь: https://github.com/deeplearning4j/deeplearning4j/tree/master/deeplearning4j/deeplearning4j-nn/src/main/java/org/deeplearning4j/nn/graph/vertex/impl. Я думаю, что L2Vertex будет наиболее похож на то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...