【发布时间】:2021-03-21 13:30:15
【问题描述】:
我正在开发一个具有 CNN、LSTM 和注意力层的图像分类模型。当我运行model.fit() 时,它向我显示Incompatible shapes: [217,1] vs. [480,1] 的错误
这是我的模型
def ReshapeLayer(x):
shape = x.shape
reshape = Reshape((shape[1],shape[2]*shape[3]))(x)
return reshape
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(16, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Lambda(ReshapeLayer))
model.add(LSTM(16, return_sequences=True))
model.add(Flatten())
model.add(attention(return_sequences=True))
model.add(BatchNormalization())
model.add(Activation('tanh'))
model.add(Dropout(0.6))
model.add(Dense(units=2, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=optimizers.Adam(lr=1e-5, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False), metrics=['accuracy'])
model.summary()
这是模型摘要
Model: "sequential_105"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_941 (Conv2D) (None, 126, 126, 16) 448
_________________________________________________________________
max_pooling2d_72 (MaxPooling (None, 63, 63, 16) 0
_________________________________________________________________
conv2d_942 (Conv2D) (None, 61, 61, 16) 2320
_________________________________________________________________
max_pooling2d_73 (MaxPooling (None, 30, 30, 16) 0
_________________________________________________________________
lambda_9 (Lambda) (None, 30, 480) 0
_________________________________________________________________
lstm_47 (LSTM) (None, 30, 16) 31808
_________________________________________________________________
flatten_25 (Flatten) (None, 480) 0
_________________________________________________________________
attention_31 (attention) (480, 480) 960
_________________________________________________________________
batch_normalization_837 (Bat (480, 480) 1920
_________________________________________________________________
activation_837 (Activation) (480, 480) 0
_________________________________________________________________
dropout_28 (Dropout) (480, 480) 0
_________________________________________________________________
dense_62 (Dense) (480, 2) 962
=================================================================
Total params: 38,418
Trainable params: 37,458
Non-trainable params: 960
_________________________________________________________________
这里是model.fit()
early_stopping = EarlyStopping(monitor='val_loss', min_delta=0.0001, patience=2, mode='auto')
EPOCHS = 20
BATCH_SIZE = 480
history = model.fit(X_train, Y_train, batch_size=BATCH_SIZE, epochs = EPOCHS, validation_data = (X_val, Y_val))
这是我遇到的错误
Epoch 1/20
7/8 [=========================>....] - ETA: 0s - loss: 0.9753 - accuracy: 0.5111
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-210-24f78483866b> in <module>()
2 EPOCHS = 20
3 BATCH_SIZE = 480
----> 4 history = model.fit(X_train, Y_train, batch_size = BATCH_SIZE, epochs = EPOCHS, validation_data = (X_val, Y_val))
6 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name)
58 ctx.ensure_initialized()
59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
---> 60 inputs, attrs, num_outputs)
61 except core._NotOkStatusException as e:
62 if name is not None:
InvalidArgumentError: Incompatible shapes: [217,1] vs. [480,1]
[[node sequential_105/attention_31/add (defined at <ipython-input-199-3f2eae608e7b>:18) ]] [Op:__inference_train_function_140276]
Function call stack:
train_function
训练正在运行一些迭代,然后在上述错误处停止。
【问题讨论】:
-
包括
X_train和X_val的形状。验证期间抛出的错误表明X_val是问题所在。
标签: python python-3.x tensorflow keras