📜  Tensorflow.js tf.layers.lstm()函数(1)

📅  最后修改于: 2023-12-03 14:47:55.289000             🧑  作者: Mango

TensorFlow.js tf.layers.lstm()函数介绍

简介

tf.layers.lstm() 函数是 TensorFlow.js 中用来创建长短时记忆网络 (Long Short-Term Memory, LSTM) 模型的函数之一,它采用了 Keras 中的 LSTM 层实现。LSTM 是一类特殊的循环神经网络 (Recurrent Neural Network, RNN),主要用于处理序列数据(如语音、文本、时间序列数据等),能够有效地建模长期依赖关系。

语法
tf.layers.lstm(config)

config 是一个对象,包含了 LSTM 层的各种配置参数,如下所示:

  • units:正整数,表示 LSTM 层的输出维度大小(也称为“隐藏层大小”)。
  • kernelInitializer:权重矩阵的初始化方法,默认为 glorotUniform
  • recurrentInitializer:循环权重矩阵的初始化方法,默认为 orthogonal
  • biasInitializer:偏置向量的初始化方法,默认为 zeros
  • unitForgetBias:若为 true,则在遗忘门的偏置向量 b_f 上加上 1,可以加速 LSTM 的收敛速度。默认为 false。
  • activation:用于输出的激活函数,默认为 tanh
  • recurrentActivation:用于循环的激活函数,默认为 hardSigmoid
  • useBias:是否使用偏置向量,默认为 true。
  • kernelRegularizer:权重矩阵的正则化方法,默认为 null。
  • recurrentRegularizer:循环权重矩阵的正则化方法,默认为 null。
  • biasRegularizer:偏置向量的正则化方法,默认为 null。
  • dropout:一个浮点数,表示在输入数据的 Dropout 比率。注意,此处指的是抑制序列上每个 LSTM 单元之间的信号。默认为 0。
  • recurrentDropout:一个浮点数,表示在状态数据的 Dropout 比率。注意,此处指的是抑制序列上每个 LSTM 单元自身的信号。默认为 0。
  • implementation:实现方式,支持 '1''2' 两种实现方式,默认为 '2'。实现方式 '1' 使用更多的时间和空间,但可以处理更长的序列。实现方式 '2' 耗时少,但只能处理较短的序列。
返回值

一个 LSTM 层对象。

示例

下面是一个使用 tf.layers.lstm() 函数创建一个简单 LSTM 模型的示例:

const lstmLayer = tf.layers.lstm({
  units: 32,
  inputShape: [10, 8],
  returnSequences: true,
});

const input = tf.input({ shape: [10, 8] });
const output = lstmLayer.apply(input);

const model = tf.model({ inputs: input, outputs: output });
model.summary();

这个示例中,我们创建了一个具有 32 个隐藏层节点的 LSTM 层对象。输入数据的形状为 (batchSize, timeSteps, inputDim),其中 batchSize 表示输入数据的样本数量,timeSteps 表示在序列上滑动 LSTM 窗口的长度,inputDim 表示输入数据的维度。在上面的示例中,我们设置了输入数据的形状为 [10, 8],表示在 batch 为 10,timeSteps 为 8,inputDim 为 1 的情况下使用 LSTM 模型进行训练。同时,我们还指定了 returnSequences 参数为 true,表示输出的是每个时刻的 LSTM 单元状态,而不是只输出最终状态。

然后我们创建了一个 tf.model() 对象,设置输入为 input,输出为 output,即使用 LSTM 模型进行序列预测。

最后调用 model.summary() 方法,打印模型的详细信息,如下所示:

_________________________________________________________________
Layer (type)                 Output shape              Param #
=================================================================
input_1 (InputLayer)         [(null, 10, 8)]           0
_________________________________________________________________
lstm (LSTM)                  (null, 10, 32)            5248
=================================================================
Total params: 5,248
Trainable params: 5,248
Non-trainable params: 0
_________________________________________________________________

我们可以看到,该模型中 LSTM 层的输出形状为 (batchSize, timeSteps, units),即 (10, 8, 32),LSTM 层总共有 5,248 个训练参数可供优化。