如何修复这个错误?我尝试访问了所有论坛,寻找解决这个问题的答案。训练集和测试集中有5个类别。
from keras.models import Sequentialfrom keras.preprocessing.image import ImageDataGeneratorfrom keras.layers import Convolution2D, MaxPooling2D, Flatten, Denseclassifier=Sequential()#第一个卷积层classifier.add(Convolution2D(32, 3, 3, input_shape=(64,64,3),activation="relu"))#池化classifier.add(MaxPooling2D(pool_size = (2, 2)))#添加第二个卷积层classifier.add(Convolution2D(32, 3, 3, activation = 'relu'))classifier.add(MaxPooling2D(pool_size = (2, 2)))#平铺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)
这里我附上了错误的图片以供审阅。错误
回答:
在你的代码中,以下这行是错误的
classifier.add(Dense(output_dim = 1, activation = 'softmax'))
将其更改为
classifier.add(Dense(output_dim = 5, activation = 'softmax'))
为什么要这样做?因为你的最终层是5维的。我怎么知道输出维度是5的?因为你使用了categorical_crossentropy
,而且看起来数据集的标签有5个类别(基于图片中输出的第一行)