如何将输入尺寸转换为Keras中LSTM图层的输出尺寸?从阅读Colah的blog post开始,似乎"timesteps"
(input_dim
的AKA或input_shape
中的第一个值)应该等于神经元的数量,这应该是等于此LSTM图层的输出数量(由units
图层的LSTM
参数描述。)
从阅读this post,我理解输入形状。令我困惑的是Keras如何将输入插入每个LSTM“智能神经元”。
困扰我的示例代码:
model = Sequential()
model.add(LSTM(32, input_shape=(10, 64)))
model.add(Dense(2))
由此,我认为LSTM层有10个神经元,每个神经元被喂食长度为64的载体。然而,它似乎有32个神经元,我不知道每个神经元被喂食了什么。我知道,对于连接到Dense层的LSTM,我们可以将所有32个输出插入到2个神经元中的每一个。令我困惑的是LSTM的InputLayer。
答案 0 :(得分:4)
我是对的!该体系结构是10个神经元,每个神经元代表一个时间步长。每个神经元被馈送64个长度的向量,代表64个特征(input_dim)。
32代表隐藏状态的数量或隐藏单位长度"。它表示有多少隐藏状态,也代表输出维度(因为我们在LSTM末尾输出隐藏状态)。
最后,将来自最后一个时间步的32维输出矢量输入到2个神经元的密集层,这基本上意味着将32个长度的载体插入两个神经元。
更多阅读,有些有用的答案:
答案 1 :(得分:1)
@Sticky,您的解释错误。 Input_shape =(batch_size,sequence_length / timesteps,feature_size)。因此,您的输入张量为10x64(如10个单词及其64个特征。就像单词嵌入一样)。32个神经元使输出矢量大小为32。
输出将具有形状结构:
答案 2 :(得分:0)
我不认为你是对的。实际上,时间步数不会影响LSTM中的参数数。
from keras.layers import LSTM
from keras.models import Sequential
time_step = 13
featrue = 5
hidenfeatrue = 10
model = Sequential()
model.add(LSTM(hidenfeatrue, input_shape=(time_step, featrue)))
model.summary()
time_step=100
model2 = Sequential()
model2.add(LSTM(hidenfeatrue, input_shape=(time_step, featrue)))
model2.summary()
重用:
Using TensorFlow backend.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (None, 10) 640
=================================================================
Total params: 640
Trainable params: 640
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_2 (LSTM) (None, 10) 640
=================================================================
Total params: 640
Trainable params: 640
Non-trainable params: 0
_________________________________________________________________