Skip to main content
 首页 » 编程设计

python之ValueError : Error when checking target: expected dense_3 to have shape (1, ) 但得到形状为 (5,) 的数组

2025年05月04日21JustinYoung

如何修复这个错误?我尝试访问所有论坛以寻找解决此问题的答案。 train_set 和 test_Set 中有 5 个类。

from keras.models import Sequential 
 
from keras.preprocessing.image import ImageDataGenerator 
 
from keras.layers import Convolution2D, MaxPooling2D, Flatten, Dense 
classifier=Sequential() 
#1st Convolution Layer 
classifier.add(Convolution2D(32, 3, 3, input_shape=(64,64,3),activation="relu")) 
#Pooling 
classifier.add(MaxPooling2D(pool_size = (2, 2))) 
 
# Adding a second convolutional layer 
classifier.add(Convolution2D(32, 3, 3, activation = 'relu')) 
 
classifier.add(MaxPooling2D(pool_size = (2, 2))) 
 
# Flattening 
classifier.add(Flatten()) 
 
classifier.add(Dense(output_dim = 128, activation = 'relu')) 
 
classifier.add(Dense(output_dim = 64, activation = 'relu')) 
 
classifier.add(Dense(output_dim = 1, activation = 'softmax')) 
 
classifier.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy']) 
print(classifier.summary()) 
 
train_datagen = ImageDataGenerator(rescale = 1./255, 
                                   shear_range = 0.2, 
                                   zoom_range = 0.2, 
                                   horizontal_flip = True) 
 
test_datagen = ImageDataGenerator(rescale = 1./255) 
 
training_set= train_datagen.flow_from_directory('flowers/train_set', 
                                                target_size=(64,64), 
                                                batch_size=32, 
                                                class_mode='categorical') 
 
 
test_set= test_datagen.flow_from_directory('flowers/test_set', 
                                                target_size=(64,64), 
                                                batch_size=32, 
                                                class_mode='categorical') 
 
classifier.fit_generator(training_set, 
                         samples_per_epoch = 3000, 
                         nb_epoch = 25, 
                         validation_data = test_set, 
                         nb_val_samples=1000) 

我附上了错误的图片以供审核。 error

请您参考如下方法:

在你的代码中,下面一行是错误的

classifier.add(Dense(output_dim = 1, activation = 'softmax')) 

改成

classifier.add(Dense(output_dim = 5, activation = 'softmax')) 

为什么? 这是因为,您的最后一层是 5 维的。我怎么知道输出维度是 5?因为,您使用了 categorical_crossentropy 而且,数据集的标签看起来有 5 个类别(基于图像输出的第一行)