目录:
1、传统的BP网络和CNN网络
2、LSTM网络
3、LSTM的输入结构
4、pytorch中的LSTM
4.1 pytorch中定义的LSTM模型
4.2 喂给LSTM的数据格式
4.3 LSTM的output格式
5、LSTM和其他网络组合
最近在学习LSTM应用在时间序列的预测上,但是遇到一个很大的问题就是LSTM在传统BP网络上加上时间步后,其结构就很难理解了,同时其输入输出数据格式也很难理解,网络上有很多介绍LSTM结构的文章,但是都不直观,对初学者是非常不友好的。我也是苦苦冥思很久,看了很多资料和网友分享的LSTM结构图形才明白其中的玄机。
1、传统的BP网络和CNN网络
BP网络和CNN网络没有时间维,和传统的机器学习算法理解起来相差无几,CNN在处理彩色图像的3通道时,也可以理解为叠加多层,图形的三维矩阵当做空间的切片即可理解,写代码的时候照着图形一层层叠加即可。如下图是一个普通的BP网络和CNN网络。
图中的隐含层、卷积层、池化层、全连接层等,都是实际存在的,一层层前后叠加,在空间上很好理解,因此在写代码的时候,基本就是看图写代码,比如用keras就是:
# 示例代码,没有实际意义
model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu')) # 添加卷积层
model.add(MaxPooling2D(pool_size=(2, 2))) # 添加池化层
model.add(Dropout(0.25)) # 添加dropout层
model.add(Conv2D(32, (3, 3), activation='relu')) # 添加卷积层
model.add(MaxPooling2D(pool_size=(2, 2))) # 添加池化层
model.add(Dropout(0.25)) # 添加dropout层
.... # 添加其他卷积操作
model.add(Flatten()) # 拉平三维数组为2维数组
model.add(Dense(256, activation='relu')) 添加普通的全连接层
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
.... # 训练网络
2、LSTM网络
当我们在网络上搜索看LSTM结构的时候,看最多的是下面这张图: