model = Sequential()
model.add(Conv1D(32, 4, activation='relu', padding='same', input_shape=(train_x.shape[1], train_x.shape[2] * train_x.shape[3])))
model.add(LSTM(32, return_sequences=True))
model.add(MaxPooling1D(2))
model.add(Conv1D(16, 8, activation="relu", padding='same'))
model.add(LSTM(64, return_sequences=True))
model.add(MaxPooling1D(2))
model.add(Conv1D(16, 8, activation="relu", padding='same'))
model.add(LSTM(128))
model.add(Dense(3, activation='sigmoid'))
from keras.optimizers import Adam
# change the optimizer,loss function
# and metrics according to your need
model.compile(optimizer=Adam(learning_rate=0.001),
loss='binary_crossentropy',
metrics=['accuracy'])
print(model.summary())
model.fit(train_x.shape[1], train_y, epochs=20)
我收到此错误
ValueError Traceback(最近一次调用最后一次)
在
1 帧 tf__train_function(迭代器)中的/usr/local/lib/python3.10/dist-packages/keras/engine/training.py 13 尝试: 14 do_return =真 ---> 15 retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope) 16 除外: 17 do_return = 假
值错误:在用户代码中:
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1284, in train_function *
return step_function(self, iterator)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1268, in step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1249, in run_step **
outputs = model.train_step(data)
File "/usr/local/lib/python3.10/dist-packages/keras/engine/training.py", line 1050, in train_step
y_pred = self(x, training=True)
File "/usr/local/lib/python3.10/dist-packages/keras/utils/traceback_utils.py", line 70, in error_handler
raise e.with_traceback(filtered_tb) from None
File "/usr/local/lib/python3.10/dist-packages/keras/engine/input_spec.py", line 298, in assert_input_compatibility
raise ValueError(
ValueError: Input 0 of layer "sequential_2" is incompatible with the layer: expected shape=(None, 7, 84), found shape=(None, 7, 7, 12)
问题来了:
正如您所提到的,您有一个形状为
(9219, 7, 7, 12)
的数据集。值 9219 代表批量大小,从现在开始,我将使用 None 来表示它。
因此,模型的输入数据形状应该是
(None, 7, 7, 12)
。但是,在以下代码行中:
model.add(Conv1D(32, 4, activation='relu', padding='same',
input_shape=(train_x.shape[1], train_x.shape[2] * train_x.shape[3])))
您已将模型的输入形状定义为
(None, 7, 84)
,这是不兼容的并会导致异常。
相反,您应该使用以下内容(我相信您的代码中存在拼写错误):
model.add(Conv1D(32, 4, activation='relu', padding='same',
input_shape=(train_x.shape[1], train_x.shape[2], train_x.shape[3])))