我想知道LSTM如何在Keras工作 . 例如,在_618781中,和许多其他人一样,你可以找到这样的东西:
model.add(LSTM(4, input_shape=(1, look_back)))
“4”是什么意思 . 它是层中神经元的数量 . 通过神经元,我的意思是每个实例给出一个输出?
实际上,我发现this brillant discussion但是并没有真正相信the reference given中提到的解释 .
在该方案中,人们可以看到所示的 num_units
,并且我认为我说这个单元中的每一个都是非常原子的LSTM单元(即4个门)并没有错 . 但是,这些单位是如何连接的?如果我是对的(但不确定), x_(t-1)
的大小为 nb_features
,那么每个特征都是一个单位的输入, num_unit
必须等于 nb_features
对吗?
现在,我们来谈谈keras . 我读过this post and the accepted answer并遇到麻烦 . 的确,答案是:
基本上,形状就像(batch_size,timespan,input_dim),其中 input_dim
可以与 unit
不同
在这种情况下 ?我在以前的参考中遇到麻烦......
而且,它说,
Keras中的LSTM仅定义一个LSTM块,其单元长度为单位长度 .
好的,但是如何定义完整的LSTM图层呢?是 input_shape
隐含地创建了与 time_steps
的数量一样多的块(根据我的说法,这是我的代码中 input_shape
参数的第一个参数?
谢谢你照亮我
编辑:是否也可以清楚地详细说明如何为有状态的LSTM模型重塑大小 (n_samples, n_features)
的数据?如何处理time_steps和batch_size?
2 回答
您可以(完全按照您对完全连接的图层的想法)来考虑它 . 单位是神经元 .
与大多数众所周知的层类型一样,输出的维数是神经元的数量 .
不同之处在于,在LSTM中,这些神经元不会彼此完全独立,它们将由于掩盖下的数学运算而相互通信 .
在进一步讨论之前,看看有关LSTM,其输入/输出以及stative = true / false的使用的非常完整的解释可能会很有趣:Understanding Keras LSTMs . 请注意,您的输入形状应为
input_shape=(look_back, 1)
. 输入形状为(time_steps, features)
.虽然这是一系列完全连接的图层:
隐藏层1: 4 units
隐藏第2层: 4 units
输出图层: 1 unit
这是一系列LSTM图层:
哪里
input_shape = (batch_size, arbitrary_steps, 3)
每个LSTM层将一遍又一遍地重复使用相同的单位/神经元,直到处理输入中的所有任意时间步长 .
输出将具有形状:
(batch, arbitrary_steps, units)
如果return_sequences=True
.(batch, units)
如果return_sequences=False
.内存状态的大小为
units
.从最后一步处理的输入的大小为
units
.确切地说,将有两组单元,一组用于原始输入,另一组用于处理来自最后一步的已处理输入 . 由于内部结构,每组将有比参数数量大4倍的参数(这4个与图像无关,它是固定的) .
Flow:
采用n个步骤和3个功能进行输入
第1层:
对于输入中的每个时间步骤:
在输入上使用4个单位以获得4号结果
在上一步的输出上使用4个循环单位
输出最后一步(
return_sequences=False
)或全部(return_sequences = True
)步骤输出要素= 4
第2层:
与第1层相同
第3层:
对于输入中的每个时间步骤:
在输入上使用1个单位以获得1号结果
在上一步的输出上使用1个单位
输出最后一步(
return_sequences=False
)或全部(return_sequences = True
)步骤单位数是LSTM的内部矢量状态
h
和c
的大小(长度) . 这与输入的形状无关,它由i
,f
和o
门的各种内核进行了升级(通过密集转换) . 在链接的帖子中描述了如何将所得到的潜在特征转换为h
和c
的细节 . 在您的示例中,输入数据形状将转变为
如果return_sequences为真,否则只有最后一个
h
将被设为(batch_size, 4)
. 我建议使用更高的潜在维度,大多数问题可能是128或256 .