如何在tensorflow.js中创建自己的图层

时间:2019-01-13 14:51:54

标签: neural-network tensorflow.js

我是tensorflow.js的新手,我想知道您是否能够创建如下所示的神经网络:

Neural Network

到目前为止,我仅看到密集的图层(tf.layers.dense),但我不知道是否有可能/如何创建此输入图层。

2 个答案:

答案 0 :(得分:1)

完全连接的神经网络(也称为密集层)可用于表示上述架构。实际上,在完全连接的情况下,输入和输出之间的关系是线性的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>

答案 1 :(得分:1)

如果要使用变量匹配项进行预测,则可以使用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)以外的网络。当您需要简化问题或限制问题时(例如,视频中一帧的重要性。这种限制很有趣。首先使用密集时间分布提取特征,然后使用密集融合特征)。

这些解决方案的问题在于匹配的顺序确实很重要,为避免此问题,可以使用此体系结构(使用sum融合):

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}))