📜  Tensorflow.js tf.layers.Layer 类(1)

📅  最后修改于: 2023-12-03 15:05:32.969000             🧑  作者: Mango

TensorFlow.js tf.layers.Layer 类

TensorFlow.js的tf.layers.Layer类是神经网络中的重要组件之一,它被用于自定义层。该类可以被用作任何Python编写的TensorFlow版本中的自定义层的基础类。tf.layers.Layer类简化了层的创建和使用的过程,可以在构建神经网络架构时大大减少代码量。

创建一个 Layer

通过继承tf.layers.Layer类,可以非常容易地创建自己的层:

class MyCustomLayer extends tf.layers.Layer {
  constructor(config) {
    super(config);
  }

  // build()函数是用来定义该自定义层的权重。例如,在这里可以定义input
  build(inputShape) {
    // 添加一个可训练的权重
    this.kernel = this.addWeight(
      'kernel',
      [inputShape[inputShape.length - 1], 2], // [input_shape, output_shape]
      { initializer: 'randomNormal' } // 添加一个权重初始化器
    );

    // 不要忘记从 super.build() 调用中返回
    return super.build(inputShape);
  }

  // call()函数是实际计算的主体
  call(input) {
    // 实施这个层的实际逻辑,例如,添加一个密集层
    return tf.matMul(input, this.kernel);
  }

  // 可选函数,如果该层将被以序列的形式堆叠,则需要定义输入&输出形状
  computeOutputShape(inputShape) {
    return [inputShape[0], 2]; // 2维输出
  }
}

在上述示例中,我们实现一个简单的自定义层,该层接收输入,将其乘以一个可训练的随机权重,并将其作为输出返回。通过在build()函数中使用addWeight()方法,可以创建并添加一个可训练的权重张量。call()方法定义了实际的计算逻辑;在这种情况下,它实现了一个简单的矩阵乘法。

最后,通过实现computeOutputShape()函数,我们告诉该层其输出形状,这对于在序列堆叠中使用自定义层非常有用。

在神经网络中使用自定义层

一旦你创建了你的自定义层,你可以将它作为神经网络中的组件使用:

const model = tf.sequential({
  layers: [
    tf.layers.dense({ units: 4, inputShape: [2], activation: 'relu' }),
    new MyCustomLayer({}),
    tf.layers.dense({ units: 1, activation: 'sigmoid' })
  ]
});

在上面的代码中,我们使用tf.layers.dense添加了两个内置层。我们的自定义层在这里引入,并作为一个普通的Javascript对象包装传递给神经网络模型的layers数组之一。

更多信息

更多关于TensorFlow.js的自定义层和其他功能,请查看以下文档: