我不明白LSTM层如何接收数据。
LSTM层需要三个维度(x,y,z)
。
我确实有一个时间序列数据集:总共有2900行,概念上应该分为每组23行连续的数据,每行由178个特征描述。概念上,每23行我有一个新的序列,长度为23行,关于一个新患者。
以下陈述是否正确?
x
样本数 = 23行长序列的组数 – 即len(dataframe)/23
y
时间步长 = 每个序列的长度 – 根据领域假设这里是23。z
特征大小 = 每行的列数 – 在这种情况下是178。
因此x*y = "数据集中的行数"
假设这是正确的,在这种情况下训练模型时的批量大小是什么?
可能是训练时一个周期中考虑的样本数?
因此,如果x
(样本数)等于200,那么设置batch_size
大于200是没有意义的,因为那是我的上限 – 我没有更多的数据来训练。
回答:
我理解你的描述是说你的总数据集有2900个数据样本。每个数据样本有23个时间槽,每个时间槽有一个178维的向量。
如果是这种情况,你的模型的input_shape应该定义为(23, 178)。批量大小只是从2900个样本中用于训练/测试/预测运行的样本数量。
尝试以下操作:
from keras.models import Sequentialfrom keras.layers import Dense, LSTMmodel = Sequential()model.add(LSTM(64, input_shape=(23,178)))model.compile(loss='mse', optimizer='sgd')model.summary()print model.input
这只是一个简单的模型,为每个样本输出一个64宽的向量。你会看到预期的model.input是:
Tensor("lstm_3_input:0", shape=(?, 23, 178), dtype=float32)
在输入形状中批量大小未设置,这意味着该模型可以用于训练/预测不同大小的批次。