TensorFlow Keras LSTM 输出解释

参考文章:
What does Tensorflow LSTM return?
Tensorflow RNN LSTM output explanation

>>> inputs = tf.random.normal([32, 10, 8])
>>> lstm = tf.keras.layers.LSTM(4)
>>> output = lstm(inputs)
>>> print(output.shape)
(32, 4)
>>> lstm = tf.keras.layers.LSTM(4, return_sequences=True, return_state=True)
>>> whole_seq_output, final_memory_state, final_carry_state = lstm(inputs)
>>> print(whole_seq_output.shape)
(32, 10, 4)
>>> print(final_memory_state.shape)
(32, 4)
>>> print(final_carry_state.shape)
(32, 4)

在这里插入图片描述
其中图里上方的输出 h t h_t ht可以视为 o t o_t ot

在Keras中如果return_state=True则LSTM单元有三个输出,分别为

  • 一个输出状态(output state) o t o_t ot
  • 一个隐藏状态(hidden state) h t h_t ht
  • 一个单元状态(cell state) c t c_t ct

keras 文档中给出的写法如下:

whole_seq_output, final_memory_state, final_carry_state = lstm(inputs)

在文档中,他们不使用隐藏和单元状态这些术语。他们使用memory state表示短期记忆,即上面提到的隐藏状态。用carry state 通过所有LSTM单元,即上面提到的单元状态。

下面是前向传播的一部分源码

def step(cell_inputs, cell_states):
    """Step function that will be used by Keras RNN backend."""
    h_tm1 = cell_states[0]   #previous memory state
    c_tm1 = cell_states[2]   #previous carry state

    z = backend.dot(cell_inputs, kernel)
    z += backend.dot(h_tm1, recurrent_kernel)
    z = backend.bias_add(z, bias)

    z0, z1, z2, z3 = array_ops.split(z, 4, axis=1)

    i = nn.sigmoid(z0)
    f = nn.sigmoid(z1)
    c = f * c_tm1 + i * nn.tanh(z2)
    o = nn.sigmoid(z3)

    h = o * nn.tanh(c)
    return h, [h, c]

从源码中可以看出,第一个和第二个输出是output/hidden state,第三个输出是cell state。并且从注释中可以看出,将hidden state 命名为 memory state ;将cell state 命名为 carry state。

return_sequences=True时,whole_seq_output是整个序列的输出,维度为(batch_size,seq_length,units)。
return_sequences=False时,whole_seq_output是最后一个单元的输出,维度为(batch_size,units),此时与第二个输出相同。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您介绍如何使用Tensorflow实现LSTM溶解氧预测。 首先,您需要准备数据集。数据集应该包含时间序列数据和对应的溶解氧值。您可以使用历史数据集进行训练和验证,也可以使用实时数据进行预测。确保数据集已经被处理成适合LSTM模型的格式。 接下来,您需要导入Tensorflow库并定义模型。在这种情况下,我们将使用LSTM模型进行预测。以下是一个基本的LSTM模型示例: ```python import tensorflow as tf model = tf.keras.Sequential([ tf.keras.layers.LSTM(64, input_shape=(time_steps, features)), tf.keras.layers.Dense(1) ]) ``` 在这里,我们定义了一个具有一个LSTM层和一个密集层的序列模型。LSTM层的输出形状为(batch_size,64),输入形状为(time_steps,features),其中time_steps是时间步长,features是特征数。密集层有一个神经元,用于输出预测值。 接下来,我们需要编译模型并设置损失函数和优化器: ```python model.compile(loss='mse', optimizer='adam') ``` 在这里,我们使用均方误差(MSE)作为损失函数,并使用Adam优化器进行优化。 接下来,我们可以使用fit方法训练模型: ```python model.fit(X_train, y_train, epochs=100, validation_data=(X_val, y_val)) ``` 在这里,我们将训练数据集(X_train,y_train)用于模型训练,并使用验证数据集(X_val,y_val)进行验证。 最后,我们可以使用predict方法进行预测: ```python y_pred = model.predict(X_test) ``` 在这里,我们使用测试数据集进行预测,并将预测结果存储在y_pred中。 这就是使用Tensorflow实现LSTM溶解氧预测的基本步骤。请注意,这只是一个基本示例,您可以根据需要进行更改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值