Mr.*_*ysl 8 python deep-learning lstm keras tensorflow
我试图用keras训练LSTM模型,但我觉得我在这里弄错了.
我收到了错误
ValueError:检查输入时出错:预期lstm_17_input有3个维度,但得到的数组有形状(10000,0,20)
而我的代码看起来像
model = Sequential()
model.add(LSTM(256, activation="relu", dropout=0.25, recurrent_dropout=0.25, input_shape=(None, 20, 64)))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(X_train, y_train,
batch_size=batch_size,
epochs=10)
Run Code Online (Sandbox Code Playgroud)
哪里X_train有一个形状,(10000, 20)前几个数据点是这样的
array([[ 0, 0, 0, ..., 40, 40, 9],
[ 0, 0, 0, ..., 33, 20, 51],
[ 0, 0, 0, ..., 54, 54, 50],
...
Run Code Online (Sandbox Code Playgroud)
并且y_train具有(10000, )二进制(0/1)标签数组的形状.
有人能指出我错在哪里吗?
Max*_*xim 17
为了完整起见,这就是发生的事情.
首先LSTM,像Keras中的所有图层一样,接受两个参数:input_shape和batch_input_shape.所不同的是惯例,input_shape 不包含批量大小,同时batch_input_shape是全情投入的形状,包括批量大小.
因此,规范input_shape=(None, 20, 64)告诉keras期望一个4维输入,这不是你想要的.这是正确的(20,).
但那还不是全部.LSTM层是一个循环层,因此它需要一个三维输入(batch_size, timesteps, input_dim).这就是为什么正确的规范是input_shape=(20, 1)或batch_input_shape=(10000, 20, 1).此外,您的训练阵列也应该重新形成,以表示每个步骤都有20时间步和1输入功能.
因此,解决方案:
X_train = np.expand_dims(X_train, 2) # makes it (10000,20,1)
...
model = Sequential()
model.add(LSTM(..., input_shape=(20, 1)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7380 次 |
| 最近记录: |