📅  最后修改于: 2023-12-03 15:05:32.969000             🧑  作者: Mango
TensorFlow.js的tf.layers.Layer
类是神经网络中的重要组件之一,它被用于自定义层。该类可以被用作任何Python编写的TensorFlow版本中的自定义层的基础类。tf.layers.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的自定义层和其他功能,请查看以下文档: