📜  Tensorflow.js tf.layers.rnn()函数

📅  最后修改于: 2022-05-13 01:56:27.369000             🧑  作者: Mango

Tensorflow.js tf.layers.rnn()函数

Tensorflow.js 是谷歌开发的一个开源库,用于在浏览器或节点环境中运行机器学习模型和深度学习神经网络。

Tensorflow.js tf.layers.rnn()函数基本上是循环层的基类。

句法:

tf.layers.rnn( args );

参数:

  • args:它是一个具有以下字段的对象:
    • 单元格:它应该是 RNN 单元格的一个实例或 RNN 单元格实例的数组。
    • returnSequences:它应该是布尔值。它定义了这两种天气最后输出或输出序列中的完整序列返回。
    • returnState:它应该是布尔值。它定义了输出中的返回最后状态。
    • goBackwards:它应该是布尔值。它定义是否以反向和反向顺序处理输入。
    • 有状态的:它应该是布尔值。它定义是否使用批次的最后状态作为当前批次的初始状态。
    • 展开:它应该是布尔值。它告诉是否使用展开的网络,否则使用符号循环。
    • inputDim:应该是一个数字。当该层用作模型的第一层时使用此层。它定义了层中输入的维度。
    • inputLength:应该是一个数字。当输入数据中的序列是恒定的时,该字段应该是。
    • inputShape:它应该是一个数字数组。该字段用于创建输入层,该输入层用于插入该层之前。
    • batchInputShape:应该是一个数字数组。如果 inputShape 和此字段作为创建用于在此层之前插入的输入层的参数提供,则将使用此字段。
    • batchSize:应该是一个数字。在没有 batchInputShape 的情况下,此字段用于使用 inputShape 创建 batchInputShape。 batchInputShape:[batchSize,…inputShape]。
    • dtype:如果该层用作输入层,则该字段用作该层的数据类型。
    • name:应该是字符串类型。此字段定义此层的名称。
    • 可训练:它应该是布尔值。该字段定义了该层的权重是否可以进行拟合训练。
    • 权重:这应该是定义该层初始权重值的张量。
    • inputDType:这是用于 Legacy 支持的数据类型。

返回值:返回RNN。

该层支持使用任意数量的时间步长屏蔽输入数据。我们可以将 RNN 层设置为“有状态”,这意味着为一个批次中的样本计算的状态将被重新用作下一批的初始状态。

输入形状应该是一个形状为 [batchSize, timeSteps, inputDim] 的 3D 张量

根据提供给该层的参数和值,我们得到输出层的形状:

示例 1:如果 returnState 设置为 true,则此函数返回张量数组,其中第一个张量是输出。剩余的张量是最后时间步的状态。数组中所有张量的形状将是 [batchSize, units]。

Javascript
// Cells for RNN 
const cells = [
   tf.layers.lstmCell({units: 4}),
   tf.layers.lstmCell({units: 8}),
];
const rnn = tf.layers.rnn({cell: cells, returnState:true });
  
// Create an input with 8 time steps and
// 16 lenght vector at each step.
const Input_layer = tf.input({shape: [8, 16]});
const Output_layer = rnn.apply(Input_layer);
  
console.log(JSON.stringify(Output_layer[0].shape));


Javascript
// Cells for RNN 
const cells = [
    tf.layers.lstmCell({units: 16}),
    tf.layers.lstmCell({units: 32}),
];
const rnn = tf.layers.rnn({
    cell: cells,
    returnState: false, 
    returnSequences: true 
});
  
// Create an input with 8 time steps and
// 16 lenght vector at each step.
const Input_layer = tf.input({shape: [4, 8]});
const Output_layer = rnn.apply(Input_layer);
console.log(JSON.stringify(Output_layer.shape));


Javascript
// Cells for RNN
const cells = [
   tf.layers.lstmCell({units: 4}),
   tf.layers.lstmCell({units: 8}),
];
const rnn = tf.layers.rnn({cell: cells});
  
// Create an input with 10 time steps and 
// 20 lenght vector at each step.
const input = tf.input({shape: [10, 20]});
const output = rnn.apply(input);
  
console.log(JSON.stringify(output.shape));


输出:

​[null, 8]

示例 2:如果 returnState 未设置且 returnSequence 设置为 true,则输出张量将具有以下形状:[batchSize, timeSteps, units]。

Javascript

// Cells for RNN 
const cells = [
    tf.layers.lstmCell({units: 16}),
    tf.layers.lstmCell({units: 32}),
];
const rnn = tf.layers.rnn({
    cell: cells,
    returnState: false, 
    returnSequences: true 
});
  
// Create an input with 8 time steps and
// 16 lenght vector at each step.
const Input_layer = tf.input({shape: [4, 8]});
const Output_layer = rnn.apply(Input_layer);
console.log(JSON.stringify(Output_layer.shape));

输出:

[null,4,32]

示例 3:如果 returnState 和 returnSequnces 都没有定义,那么输出的形状将是 [batchSize, units]。

Javascript

// Cells for RNN
const cells = [
   tf.layers.lstmCell({units: 4}),
   tf.layers.lstmCell({units: 8}),
];
const rnn = tf.layers.rnn({cell: cells});
  
// Create an input with 10 time steps and 
// 20 lenght vector at each step.
const input = tf.input({shape: [10, 20]});
const output = rnn.apply(input);
  
console.log(JSON.stringify(output.shape));

输出:

[null,8]

参考资料: https://js.tensorflow.org/api/latest/#layers.rnn