Car*_*ven 6 python machine-learning lstm keras
我有一个形状如下的序列输入: (6000, 64, 100, 50)
的6000是样本的序列只是数量。每个序列64的长度。
我计划使用Keras将这个输入适合LSTM。
我以这种方式设置输入:
input = Input(shape=(64, 100, 50))
Run Code Online (Sandbox Code Playgroud)
这给了我一个输入形状 (?, 64, 100, 50)
但是,当我input像这样放入LSTM时:
x = LSTM(256, return_sequences=True)(input)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
输入0与lstm_37层不兼容:预期ndim = 3,找到的ndim = 4
如果我的输入形状像(?, 64, 100),这将是可行的,但是当我具有第4维时,则不会。
这是否意味着LSTM只能接受3维输入?如何使用Keras将4维甚至更高维的输入输入LSTM?
您还可以考虑 TimeDistributed(LSTM(...))
inp = Input(shape=(64, 100, 50))
x = TimeDistributed(LSTM(256, return_sequences=True))(inp)
model = Model(inp, x)
model.compile('adam', 'mse')
model.summary()
Run Code Online (Sandbox Code Playgroud)
小智 4
答案是你不能。
Keras 文档提供了有关循环层的以下信息:
输入形状
具有 shape 的 3D 张量(batch_size, timesteps, input_dim)。
在您的情况下,您有 64 个时间步,其中每个步的形状为 (100, 50)。让模型正常工作的最简单方法是将数据重塑为 (100*50)。
Numpy 提供了一个简单的函数来做到这一点:
X = numpy.zeros((6000, 64, 100, 50), dtype=numpy.uint8)
X = numpy.reshape(X, (6000, 64, 100*50))
Run Code Online (Sandbox Code Playgroud)
这是否合理很大程度上取决于您的数据。