Tensorflow 2.2.0 InvalidArgumentError: Incompatible shapes: [98,2] vs. [32,2]
Tensorflow 2.2.0 InvalidArgumentError: Incompatible shapes: [98,2] vs. [32,2]
我正在尝试使用数据扩充构建性别 class化模型(2 classes)。
我的数据包含 2 个名为 'men' 和 'women' 的文件夹,共有 3339 张图像。
数据路径 = 'data/'
在数据文件夹中,我有两个名为 men 和 women 的 class 文件夹。
这是我的模型和模型摘要:
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5,5), padding='same', kernel_initializer='he_normal', input_shape=(128,128,3)))
model.add(Activation('relu'))
model.add(Conv2D(filters=32, kernel_size=(5,5), padding='same', kernel_initializer='he_normal'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5,5), padding='same', kernel_initializer='he_normal'))
model.add(Activation('relu'))
model.add(Conv2D(filters=64, kernel_size=(5,5), padding='same', kernel_initializer='he_normal'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(units=256, activation='relu'))
model.add(Dense(units=num_classes, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
hist = model.fit(datagen.flow(x_train, y_train, batch_size=32),
epochs=30,
steps_per_epoch=x_train.shape[0]//32,
validation_data=(x_test,y_test),
validation_steps=x_test.shape[0]//32,
verbose=1,
callbacks=callbacks)
模型摘要:
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_17 (Conv2D) (None, 128, 128, 32) 2432
_________________________________________________________________
activation_16 (Activation) (None, 128, 128, 32) 0
_________________________________________________________________
conv2d_18 (Conv2D) (None, 128, 128, 32) 25632
_________________________________________________________________
activation_17 (Activation) (None, 128, 128, 32) 0
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 64, 64, 32) 0
_________________________________________________________________
dropout_8 (Dropout) (None, 64, 64, 32) 0
_________________________________________________________________
conv2d_19 (Conv2D) (None, 64, 64, 64) 51264
_________________________________________________________________
activation_18 (Activation) (None, 64, 64, 64) 0
_________________________________________________________________
conv2d_20 (Conv2D) (None, 64, 64, 64) 102464
_________________________________________________________________
activation_19 (Activation) (None, 64, 64, 64) 0
_________________________________________________________________
max_pooling2d_9 (MaxPooling2 (None, 32, 32, 64) 0
_________________________________________________________________
dropout_9 (Dropout) (None, 32, 32, 64) 0
_________________________________________________________________
flatten_4 (Flatten) (None, 65536) 0
_________________________________________________________________
dense_8 (Dense) (None, 256) 16777472
_________________________________________________________________
dense_9 (Dense) (None, 2) 514
=================================================================
Total params: 16,959,778
Trainable params: 16,959,778
Non-trainable params: 0
我的训练和测试数据形状:
x_train.shape = (3005, 224, 224, 3)
x_test.shape = (334, 224, 224, 3)
y_train.shape = (3005, 2)
y_test.shape = (334, 2)
以下错误:
Epoch 1/30
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-42-f9e107b66258> in <module>()
13 validation_steps=x_test.shape[0]//32,
14 verbose=1,
---> 15 callbacks=callbacks)
8 frames
/usr/local/lib/python3.6/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: [98,2] vs. [32,2]
[[node gradient_tape/binary_crossentropy/logistic_loss/mul/BroadcastGradientArgs (defined at <ipython-input-42-f9e107b66258>:15) ]] [Op:__inference_train_function_5749]
Function call stack:
train_function
你每张图的形状好像是(224,224,3),你把(128,128,3)指定为input_shape。这可能是问题所在吗?
如果没有,您能否分享您定义 x_train 和 x_test 的代码?
另外,请注意,为二元分类器定义带有 sigmoid 激活的二维输出似乎不正确。我要么有一个带有 sigmoid 激活(最常见的情况)的单元,要么使用 softmax 激活。
model.add(Dense(units=1, activation='sigmoid'))
要么
model.add(Dense(units=num_classes, activation='softmax'))
我正在尝试使用数据扩充构建性别 class化模型(2 classes)。
我的数据包含 2 个名为 'men' 和 'women' 的文件夹,共有 3339 张图像。 数据路径 = 'data/' 在数据文件夹中,我有两个名为 men 和 women 的 class 文件夹。
这是我的模型和模型摘要:
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5,5), padding='same', kernel_initializer='he_normal', input_shape=(128,128,3)))
model.add(Activation('relu'))
model.add(Conv2D(filters=32, kernel_size=(5,5), padding='same', kernel_initializer='he_normal'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=64, kernel_size=(5,5), padding='same', kernel_initializer='he_normal'))
model.add(Activation('relu'))
model.add(Conv2D(filters=64, kernel_size=(5,5), padding='same', kernel_initializer='he_normal'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(units=256, activation='relu'))
model.add(Dense(units=num_classes, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
hist = model.fit(datagen.flow(x_train, y_train, batch_size=32),
epochs=30,
steps_per_epoch=x_train.shape[0]//32,
validation_data=(x_test,y_test),
validation_steps=x_test.shape[0]//32,
verbose=1,
callbacks=callbacks)
模型摘要:
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_17 (Conv2D) (None, 128, 128, 32) 2432
_________________________________________________________________
activation_16 (Activation) (None, 128, 128, 32) 0
_________________________________________________________________
conv2d_18 (Conv2D) (None, 128, 128, 32) 25632
_________________________________________________________________
activation_17 (Activation) (None, 128, 128, 32) 0
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 64, 64, 32) 0
_________________________________________________________________
dropout_8 (Dropout) (None, 64, 64, 32) 0
_________________________________________________________________
conv2d_19 (Conv2D) (None, 64, 64, 64) 51264
_________________________________________________________________
activation_18 (Activation) (None, 64, 64, 64) 0
_________________________________________________________________
conv2d_20 (Conv2D) (None, 64, 64, 64) 102464
_________________________________________________________________
activation_19 (Activation) (None, 64, 64, 64) 0
_________________________________________________________________
max_pooling2d_9 (MaxPooling2 (None, 32, 32, 64) 0
_________________________________________________________________
dropout_9 (Dropout) (None, 32, 32, 64) 0
_________________________________________________________________
flatten_4 (Flatten) (None, 65536) 0
_________________________________________________________________
dense_8 (Dense) (None, 256) 16777472
_________________________________________________________________
dense_9 (Dense) (None, 2) 514
=================================================================
Total params: 16,959,778
Trainable params: 16,959,778
Non-trainable params: 0
我的训练和测试数据形状:
x_train.shape = (3005, 224, 224, 3)
x_test.shape = (334, 224, 224, 3)
y_train.shape = (3005, 2)
y_test.shape = (334, 2)
以下错误:
Epoch 1/30
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
<ipython-input-42-f9e107b66258> in <module>()
13 validation_steps=x_test.shape[0]//32,
14 verbose=1,
---> 15 callbacks=callbacks)
8 frames
/usr/local/lib/python3.6/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: [98,2] vs. [32,2]
[[node gradient_tape/binary_crossentropy/logistic_loss/mul/BroadcastGradientArgs (defined at <ipython-input-42-f9e107b66258>:15) ]] [Op:__inference_train_function_5749]
Function call stack:
train_function
你每张图的形状好像是(224,224,3),你把(128,128,3)指定为input_shape。这可能是问题所在吗? 如果没有,您能否分享您定义 x_train 和 x_test 的代码? 另外,请注意,为二元分类器定义带有 sigmoid 激活的二维输出似乎不正确。我要么有一个带有 sigmoid 激活(最常见的情况)的单元,要么使用 softmax 激活。
model.add(Dense(units=1, activation='sigmoid'))
要么
model.add(Dense(units=num_classes, activation='softmax'))