Как создать собственные слои в tenorflow.js - PullRequest
0 голосов
/ 13 января 2019

Я новичок в tenorflow.js, и мне было интересно, можете ли вы создать нейронную сеть, которая выглядит следующим образом:

Neural Network

До этого момента я видел только плотные слои (tf.layers.dense), но я не знаю, возможно ли / как создать этот входной слой.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Если вы хотите прогнозировать, используя переменную запись соответствия, вы можете использовать LSTM.

Поскольку практически все входы имеют одинаковую "природу", я лично определил бы вес между моделями.

const model = tf.sequential()
model.add(tf.layers.timeDistributed({
   layer: tf.layers.dense({units: 4}),
   inputShape: [3, 2],
}));
model.add(tf.layers.flatten())
model.add(tf.layers.dense({units: 8}))
model.add(tf.layers.dense({units: 2}))

Но такой же вывод, как мой комментарий сделан. Вы будете сливать спички в более глубокий слой, но они продолжат сливаться. Я не вижу необходимости использовать сеть, отличную от обычной, классической MLP. Эти ограничения интересны, когда вам нужно упростить проблему или ограничить ее (например, важность кадра в видео. Сначала используйте плотное распределение по времени для извлечения объектов, а затем используйте плотное, чтобы объединить объекты).

Проблема этих решений заключается в том, что порядок совпадений имеет значение, чтобы избежать этой проблемы, вы можете использовать эту архитектуру (плавкий с использованием суммы):

const model = tf.sequential()
model.add(tf.layers.timeDistributed({
   layer: tf.layers.dense({units: 4}),
   inputShape: [3, 2],
}));

model.add(tf.layers.sum(0))
model.add(tf.layers.dense({units: 8}))
model.add(tf.layers.dense({units: 2}))
0 голосов
/ 16 января 2019

Полностью подключенная нейронная сеть, также называемая плотными слоями, может использоваться для представления архитектуры выше. На самом деле, при полностью подключенном, отношение между входом и выходом является линейным WX+b, что означает, что если для некоторых значений W веса равны 0, между некоторыми значениями входа и некоторого узла не будет никакой связи скрытых слоев.

Можно определить вес нейронной сети при определении сетевой архитектуры следующим образом:

const model = tf.sequential()

const kernel = tf.eye(3).expandDims(-1).minimum(tf.ones([3, 2])).transpose([0,2,1]).reshape([6, 3])
kernel.print()
model.add(tf.layers.dense({inputShape: [6], units: 3, weights:[kernel], useBias: false}))
model.add(tf.layers.dense({units: 8}))
model.add(tf.layers.dense({units: 2}))
<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.14.1/dist/tf.min.js"> </script>
  </head>

  <body>
  </body>
</html>
...