我想知道LSTM在Keras是如何工作的。例如,在本教程中,与其他许多教程一样,您可以找到如下内容:
model.add(LSTM(4, input_shape=(1, look_back)))
“4”是什么意思。这是层中神经元的数量。我所说的神经元,是指每一个实例都有一个输出的东西?
事实上,我发现这是一次精彩的讨论,但并没有被参考文献中提到的解释所说服。
在该方案中,可以看到图中所示的num_单元
,我认为我说的每个单元都是一个非常原子的LSTM单元(即4个门)并没有错。但是,这些单元是如何连接的?如果我是对的(但不确定),x_(t-1)
的大小是nb_特征
,因此每个特征都是一个单位的输入,num_单位
必须等于nb_特征
对吗?
现在,让我们谈谈Keras。我已经读了这篇文章和公认的答案,并得到麻烦。事实上,答案是:
基本上,形状类似(批次大小、时间跨度、输入尺寸),其中input\u dim
可以不同于单元
在那种情况下?我对以前的参考资料有困难。。。
此外,它说,
Keras中的LSTM仅定义一个LSTM区块,其单元为单位长度。
好的,但如何定义完整的LSTM层?是不是input\u-shape
隐式创建了与时间步数一样多的块(根据我的说法,这是我的代码中
input\u-shape
参数的第一个参数)?
谢谢你点亮我
编辑:对于有状态的LSTM模型,是否也可以清楚地详细说明如何重塑数据,例如大小(n_样本,n_特征)
?如何处理时间步长和批量大小?
首先,LSTM中的单元
不是time_steps的数量。
每个LSTM单元(在给定的时间步长出现)接受输入x
,并形成一个隐藏状态向量a
,该隐藏单位向量的长度就是LSTM(Keras)中的单位。
您应该记住,代码只创建了一个RNN单元
keras.layers.LSTM(units, activation='tanh', …… )
和RNN操作由类本身按Tx次数重复。
我用一个非常简单的代码链接了这个来帮助你更好地理解它。
你可以(有点)把它想象成完全连接的层。单位是神经元。
输出的维度是神经元的数量,就像大多数已知的层类型一样。
不同之处在于,在LSTM中,这些神经元不会完全相互独立,它们会由于隐藏在隐蔽处的数学运算而相互通信。
在进一步讨论之前,可能有兴趣了解一下关于LSTM、其输入/输出以及stative=true/false的用法的完整解释:了解Keras LSTM。请注意,您的输入形状应该是input\u shape=(look\u back,1)
。输入形状为(时间步长、特征)
。
其中input\u shape=(批量大小,任意步骤,3)
每个LSTM层将不断重复使用相同的单元/神经元,直到处理输入中的所有任意时间步。
(批次,arbitrary_steps,单位)
ifreturn_sequences=True
.(批次,单位)
ifreturn_sequences=False
.确切地说,将有两组单元,一组处理原始输入,另一组处理来自最后一步的已处理输入。由于内部结构,每个组将有一个比单位数大4倍的参数(这个4与图像无关,它是固定的)。
流量:
单位数是LSTM内部向量状态的大小(长度),h
和c
。也就是说,无论输入的形状如何,它都会被i
、f
和o
门的各种内核放大(通过密集变换)。链接文章中详细介绍了如何将生成的潜在特征转化为h
和c
。在您的示例中,数据的输入形状
(batch_size, timesteps, input_dim)
将转化为
(batch_size, timesteps, 4)
如果return\u sequences
为true,否则只会执行最后一个h
,使其成为(批量大小,4)
。我建议使用更高的潜在维度,对于大多数问题可能是128或256。