ValueError:层“sequential_21”的输入0与该层不兼容:预期形状=(无,4,1),发现形状=(无,7,7,12)

问题描述 投票:0回答:1

我尝试在一系列尺寸为 (9219, 7, 7, 12) 的图像上运行 CNN-LSTM 模型,但出现以下错误:

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'))

我收到此错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-117-d8b5365ec22e> in <cell line: 4>()
      2 
      3 model.add(Conv1D(32, 4, activation='relu', padding='same', input_shape=(train_x.shape[1], train_x.shape[2], train_x.shape[3])))
----> 4 model.add(LSTM(32, return_sequences=True))
      5 model.add(MaxPooling1D(2))
      6 model.add(Conv1D(16, 8, activation="relu", padding='same'))

2 frames
/usr/local/lib/python3.10/dist-packages/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
    233             ndim = shape.rank
    234             if ndim != spec.ndim:
--> 235                 raise ValueError(
    236                     f'Input {input_index} of layer "{layer_name}" '
    237                     "is incompatible with the layer: "

ValueError: Input 0 of layer "lstm_32" is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: (None, 7, 7, 32)
python keras deep-learning conv-neural-network lstm
1个回答
0
投票

在您的输入形状中,您提供 3D 输入形状,而您应该提供像这样的 2D 输入形状

input_shape=(train_x.shape[1], train_x.shape[2] * train_x.shape[3])
。这就是第二个隐藏层抛出输入形状错误的原因。 您的代码应如下所示:

修正模型

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: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, 10, 32)            672       
                                                                 
 lstm (LSTM)                 (None, 10, 32)            8320      
                                                                 
 max_pooling1d (MaxPooling1  (None, 5, 32)             0         
 D)                                                              
                                                                 
 conv1d_1 (Conv1D)           (None, 5, 16)             4112      
                                                                 
 lstm_1 (LSTM)               (None, 5, 64)             20736     
                                                                 
 max_pooling1d_1 (MaxPoolin  (None, 2, 64)             0         
 g1D)                                                            
                                                                 
 conv1d_2 (Conv1D)           (None, 2, 16)             8208      
                                                                 
 lstm_2 (LSTM)               (None, 128)               74240     
                                                                 
 dense (Dense)               (None, 3)                 387       
                                                                 
=================================================================
Total params: 116675 (455.76 KB)
Trainable params: 116675 (455.76 KB)
Non-trainable params: 0 (0.00 Byte)
希望有帮助!
© www.soinside.com 2019 - 2024. All rights reserved.