0

我正在尝试微调 MobileNet,但收到以下错误:

ValueError, Error when checking target: expected dense_1 to have 4 dimensions, but got array with shape (10, 14)

与我设置目录迭代器的方式有什么冲突吗?

train_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
train_path, target_size=(224, 224), batch_size=10)
valid_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
valid_path, target_size=(224, 224), batch_size=10)

test_batches = ImageDataGenerator(preprocessing_function=keras.applications.mobilenet_v2.preprocess_input).flow_from_directory(
test_path, target_size=(224, 224), batch_size=10, shuffle=False)

我的新瓶颈层如下:

x=mobile.layers[-6].output
predictions = Dense(14, activation='softmax')(x)

model = Model(inputs=mobile.input, outputs=predictions)
4

1 回答 1

1

由于Dense 层应用于其输入的最后一个轴,x并且考虑到它是 4D 张量这一事实,因此该predictions张量也将是 4D 张量。这就是模型需要 4D 输出(即expected dense_1 to have 4 dimensions)但您的标签是 2D(即but got array with shape (10, 14))的原因。要解决此问题,您需要制作x为 2D 张量。一种方法是使用Flatten图层:

x = mobile.layers[-6].output
x = Flatten()(x)
predictions = Dense(14, activation='softmax')(x)
于 2018-11-04T19:37:01.277 回答