LSTM网络参数详解:从基础概念到高级应用
创作时间:
作者:
@小白创作中心
LSTM网络参数详解:从基础概念到高级应用
引用
CSDN
1.
https://blog.csdn.net/baidu_35692628/article/details/137750413
图1 LSTM模型结构可视化 [6]
图2 LSTM cell结构说明
图3 LSTM cell和num_units说明 [4]
图4 LSTM的网络结构
- LSTM
- 是对一个LSTM层的抽象,可以看成是由多个LSTM cell组成,是包含时间步的一个网络
- LSTM cell
- 图2是LSTM在时间步上的结构,结合图3来理解LSTM cell的概念
- 在时间步上cell_1->cell_2->cell_3->…只是一个cell在不同时刻的表现
- 也就是说LSTM cell是某一时刻包含多个隐藏层神经元的结构
- num_layers
- 模型层数(隐藏层)
- LSTM隐藏层/循环层的层数。如图1的隐藏层1和隐藏层2所示
- LSTM结构的个数,即多少个LSTM结构的堆叠。如图2的layer1和layer2所示
- num_layers默认是1,可以设置1~10
- 整个LSTM网络就是: input -> LSTM结构 * n -> output
- num_layers = hidden_num_layers
- feature_size
- 输入x的特征数,number of features in the input x
- feature_size = input_size
- input_size
- 输入维度,输入x的特征数
- input_size = feature_size
- hidden_size
- 隐藏层中隐藏神经元的个数,如图1和图3中所示
- 隐藏层的特征维度,有多少个隐藏神经元就有多少个输出
- 每个隐藏层隐藏节点/神经元个数可以不一样
- num_units
- 隐藏层神经元的个数,见图3所示
- num_units = hidden_size
- output_layer
- 这里指的是还没有加入全连接层或者softmax等层
- LSTM的输出是一个tuple元组
- output后如果要接全连接层,那么全连接层的输入维度 = hidden_size
- time_step
- 时间步,即时间序列长度,见图1和图2中x_t的长度
- number of frames, 帧数
- time_step = sequence_length = 帧数
- node_num
- 图1中T=4,节点数为4
- RNN/LSTM节点数node_num = 序列长度 = time_step = 帧数
- seq_len
- 从实际应用来理解,seq_len指时间序列的长度,目标的历史帧数
- seq_len = 帧数 = time_step
- num_directions
- 1 - 单向LSTM
- 2 - 双向LSTM
- h_t, c_t
- h是隐藏状态,表示短期记忆
- c是细胞状态,表示长期记忆
- h_t: t时刻的隐藏状态hidden state, h_n就是最后一个隐藏神经元的hidden state
- c_t: t时刻的细胞状态cell state, c_n就是最后一个隐藏神经元的cell state
- h_n/c_n的值和序列长度seq_len无关,和num_layers有关
- output_size
- 输出维度
- 和隐藏层数num_layers无关,和序列长度seq_len和隐藏神经元的个数hidden_size有关
- batch_size
- batch: 每次载入一批数据叫一个batch
- batch_size: 一批数据有多少个样本,比如batch_size = 32表示一次载入32个数据
- batch_size: how many samples per batch to load
- batch_first
data_loader的时候没有这个参数,模型定义的时候有这个参数
batch_first:数据组织的方式
batch_first = true:数据batch优先,也就是逐个目标序列的方式存储,如[[a_t1, a_t2, a_t3], [b_t1, b_t2, b_t3]]
batch_first = false:数据seq_len优先,也就是逐个时刻各个目标的方式存储,如[[a_t1, b_t1, c_t1], [a_t2_b_t2, c_t2], [a_t3, b_t3, c_t3]]
batch_first默认是false,pytorch的LSTM默认输入和输出都是batch_size在第二维,也就是优先按seq_len时间顺序排列数据,如下
batch_first默认为false是因为cudnn中rnn的api就是batch_size在第二维度,这也导致batch_first设置为true后训练速度可能会变慢
【batch_first = true】
input(batch, seq_len, input_size)
output(batch_size, seq_len, hidden_size * num_directions)
h0(num_layers * num_directions, batch_size, hidden_size)
c0(num_layers * num_directions, batch_size, hidden_size)
hn(num_layers * num_directions, batch_size, hidden_size)
cn(num_layers * num_directions, batch_size, hidden_size)
- 【batch_first = false】
input(seq_len, batch, input_size)
output(seq_len, batch_size, hidden_size * num_directions)
h0(num_layers * num_directions, batch_size, hidden_size)
c0(num_layers * num_directions, batch_size, hidden_size)
hn(num_layers * num_directions, batch_size, hidden_size)
cn(num_layers * num_directions, batch_size, hidden_size)
- 从上面可以看出,batch_first影响input/output的数据格式,但是对h_t/c_t的格式却没有影响,可以实际打印shape看下
- batch_first不同取值影响到如何寻址访问对应的数据,使用时需注意
【参考文章】
[1].batch_first参数
[2].batch_first参数的理解
[3].batch_first参数的理解
[4].LSTM架构详解
[5].LSTM"门"的原理解析
[6].LSTM模型结构可视化, 推荐
[7].RNN参数解释
[8].LSTM参数
[9].LSTM参数
[10].hidden_size的理解
[11].理解LSTM英文版
热门推荐
嫩花椒叶正当时,5种食谱尝遍春季限定美味
首次在地球外发现氨基酸,外星生命将重塑人类自我认知
新证据浮现,罗斯威尔事件真相仍扑朔迷离
AI助力外星生命搜索,科学家预测2047年或成关键年
厨房秤使用攻略:磅克换算不再难,4个步骤轻松掌握
千岛湖摄影指南:捕捉最美瞬间
千岛湖小众景点大揭秘:除了梅峰岛,这些地方更值得去!
千岛湖二日游必打卡:网红景点+特色美食+舒适住宿全攻略
千岛湖水上运动狂欢节,门票半价嗨翻天!
千岛湖二日游,梅峰岛必须打卡!
一文掌握Android音乐播放器开发:源码解析与实战指南
斗破苍穹:萧炎最强底牌佛怒火莲,到底是什么级别的斗技?
《旧约》vs《新约》:律法与恩典的对话
从律法到恩典:《旧约》与《新约》中上帝形象的演变
《旧约》与《新约》:东西方文化的碰撞与融合
38天仅18小时,未成年人游戏时间再受限
从虚拟建筑到编程教学,《我的世界》开启游戏教育新模式
南京必打卡网红小吃合集:从传统到创新,品味六朝古都的美食魅力
元旦苏杭五天行程攻略:五天四晚玩转杭州、乌镇、南浔、西塘、苏州
流淌在字里行间的江南文化气息——评《中国江南水乡建筑文化》
新手也能种好花椒:六大环节全程技术指导
花椒叶:温中散寒效果好,三种使用方法守护健康
冬季食用花椒叶:营养功效与4种实用食谱
花椒叶炒鸡蛋:夏季开胃的简单家常菜
停车导航、预约、缴费全覆盖,上海停车APP试运行观察
手机重启 vs 关机再开机,哪个更靠谱?
泉州开元寺:大雄宝殿藏百柱,双石塔镇寺千年
“神佛降临”的庇护——泰国佛牌的发展历程
手机无法接收短信怎么办?
心理学揭秘:相遇如何影响你的运气?