我遇到了以下问题:“检查目标时出错:期望density_2具有2个维,但是数组的形状为(867,44,44)”。
我认为我需要在预处理零件期间转移尺寸或更改损失函数。
我已经搜索了关于stackoverflow的相关问题,但未能解决。有人可以帮我吗?
输入是一些彩色图片,高度为46,宽度为120,因此我将输入设置为(46,120,3)。
X_train的形状为:(1084,46,120,3) 转换为一种热编码后的Y_train(即标签)的形状为:(1084,44,44)
预处理部分和模型的详细信息如下:
model = Sequential()
X_train = X_train/255 Y_train = to_categorical(Y_train,num_classes = 44)
random_seed = 2 X_train, X_val, Y_train, Y_val = train_test_split(X_train,
Y_train, test_size = 0.2, random_state=random_seed)
model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',input_shape=(46,120,3),activation='relu',data_format
= 'channels_last'))
model.add(Conv2D(filters=16,kernel_size=(5,5),padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=(2,2),strides = (1,1)))
model.add(Dropout(0.25))
model.add(Conv2D(filters=32,kernel_size=(5,5),padding='same',activation='relu'))
model.add(Conv2D(filters=32,kernel_size=(5,5),padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=(2,2),strides = (1,1))) model.add(Dropout(0.25))
model.add(Conv2D(filters=32,kernel_size=(5,5),padding='same',activation='relu'))
model.add(Conv2D(filters=32,kernel_size=(5,5),padding='same',activation='relu'))
model.add(MaxPool2D(pool_size=(2,2),strides = (1,1)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256,activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(44,activations='softmax'))
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',metrics=['accuracy'])
model.summary()
# Set the learning rate annealer learning_rate_reduction =
ReduceLROnPlateau(monitor='val_acc',
patience = 3,
verbose = 1,
factor = 0.5,
min_lr = 0.00001) epochs = 100 batch_size = 86
model.fit(X_train,Y_train)
ValueError:检查目标时出错:预期density_2具有2维,但数组的形状为(867,44,44)
顺便说一句,density_2是我模型的最后一层。
答案 0 :(得分:0)
将密集层作为最终输出时,不能期望以2D标注。 因此,要么需要2D标注,要么需要一个将输出2D张量的图层,或者需要将Y_train修改为Dense图层可以预测的值。
答案 1 :(得分:0)
我解决了删除to_categorical()方法的问题,并使用binary_crossentropy作为损失。因为每个Y_train是形状为(1,44)的二进制向量,并且如果添加另一个to_categorical()方法,它将使每个Y_train的形状变为(1,44,44),所以我不会知道为什么,而我仍在设法弄清楚。但这就是问题所在。谢谢大家的帮助!