本文选自:👉 365天深度学习训练营 (
免费辅导
、
免费咨询
)
一句话介绍LSTM,它是RNN的进阶版,如果说RNN的最大限度是理解一句话,那么LSTM的最大限度则是理解一段话,详细介绍如下:
LSTM,全称为长短期记忆网络(Long Short Term Memory networks),是一种特殊的RNN,能够学习到长期依赖关系。1997提出,许多研究者进行了一系列的工作对其改进并使之发扬光大。LSTM在许多问题上效果非常好,现在被广泛使用。
所有的循环神经网络都有着重复的神经网络模块形成链的形式。在普通的RNN中,重复模块结构非常简单,其结构如下:
LSTM避免了长期依赖的问题。可以记住长期信息!LSTM内部有较为复杂的结构。能通过门控状态来选择调整传输的信息,记住需要长时间记忆的信息,忘记不重要的信息,其结构如下:
一、LSTM的数据处理流程
为了更好的理解LSTM输入数据的结构,我将时序数据(LSTM输入数据)以可视化的形式呈现。
根据输入的数据结构、预测输出,我们的程序可以大致分为以下六类:
二、关于代码实现
1. 单输入单输出(单输出时间步)
- 输入:单个特征,多个时间步
- 输出:单个特征,单个时间步
🥫 数据案例
训练集:
X y
[10,20,30,40,50][60][20,30,40,50,60][70][30,40,50,60,70][80]
…
预测输入:
X
[70,80,90,100,110]
期待输出:
y
[120]
🥠 TensorFlow2代码实现
model = Sequential()
model.add( LSTM(50, activation='relu', input_shape =(n_steps, n_features)))
model.add( Dense(1))
model.compile(optimizer='adam', loss='mse')
n_steps =5
n_features =1
2. 多输入单输出(单输出时间步)
- 输入:多个特征,多个时间步
- 输出:单个特征,单个时间步
🥫 数据案例
训练集:
X y
[[10,11],[20,21],[30,31],[40,41],[50,51]]60[[20,21],[30,31],[40,41],[50,51],[60,61]]70
…
预测输入:
X
[[30,31],[40,41],[50,51],[60,61],[70,71]]
期待输出:
y
80
🥠 TensorFlow2代码实现
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(n_steps, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
n_steps =5# 此例中 n_features = 2,因为输入有两个并行序列
n_features = X.shape[2]
3. 多输入多输出(单输出时间步)
- 输入:多个特征,多个时间步
- 输出:多个特征,单个时间步
🥫 数据案例
训练集:
X y
[[10,11],[20,21],[30,31],[40,41],[50,51]][60,61][[20,21],[30,31],[40,41],[50,51],[60,61]][70,71]
…
预测输入:
X
[[30,31],[40,41],[50,51],[60,61],[70,71]]
期待输出:
y
[80,81]
🥠 TensorFlow2代码实现
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps, n_features)))
model.add(Dense(n_features))
model.compile(optimizer='adam', loss='mse')
n_steps =5# 此例中 n_features = 2,因为输入有2个并行序列
n_features = X.shape[2]
4. 单输入单输出(多输出时间步)
- 输入:单个特征,多个时间步
- 输出:单个特征,多个时间步
🥫 数据案例
训练集:
X y
[10,20,30,40,50][60,70][20,30,40,50,60][70,80]
…
预测输入:
X
[30,40,50,60,70]
期待输出:
y
[80,90]
🥠 TensorFlow2代码实现
model = Sequential()
model.add(LSTM(100, activation='relu', return_sequences=True, input_shape=(n_steps, n_features)))
model.add(Dense(n_steps_out))
model.compile(optimizer='adam', loss='mse')
n_steps =5
n_steps_out =2
n_features =1
多输入单输出(多输出时间步)与多输入多输出(多输出时间步)同理,这里就不赘述了
参考文章
版权归原作者 K同学啊 所有, 如有侵权,请联系我们删除。