我正在使用 Keras 来解决二元分类问题。我正在使用 LeNet 的以下改编版本:
lenet_model = models.Sequential()
lenet_model.add(Convolution2D(filters=filt_size, kernel_size=(kern_size,
kern_size), padding='valid', input_shape=input_shape))
lenet_model.add(Activation('relu'))
lenet_model.add(BatchNormalization())
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Convolution2D(filters=64, kernel_size=(kern_size,
kern_size), padding='valid'))
lenet_model.add(Activation('relu'))
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Convolution2D(filters=128, kernel_size=(kern_size,
kern_size), padding='valid'))
lenet_model.add(Activation('relu'))
lenet_model.add(MaxPooling2D(pool_size=(maxpool_size, maxpool_size)))
lenet_model.add(Flatten())
lenet_model.add(Dense(1024, kernel_initializer='uniform'))
lenet_model.add(Activation('relu'))
lenet_model.add(Dense(512, kernel_initializer='uniform'))
lenet_model.add(Activation('relu'))
lenet_model.add(Dropout(0.2))
lenet_model.add(Dense(1, kernel_initializer='uniform'))
lenet_model.add(Activation('sigmoid'))
lenet_model.compile(loss='binary_crossentropy', optimizer=Adam(),
metrics=['accuracy'])
但是我得到了这个:
ValueError: Error when checking model target: expected activation_6 to have shape (None, 1) but got array with shape (1652, 2). It gets resolved if I use 2 in the final Dense layer.
最佳答案
我建议首先检查数据的维度。训练数据集目标是二维的,但模型采用一维数据。
您已将 lenet_model.add(Dense(1, kernel_initializer='uniform'))
设置为接受二维数据。您需要设置最终的密集层形状,使其接受目标形状(None,2)
lenet_model.add(Dense(2, kernel_initializer='uniform'))
应该是这样,否则对数据进行预处理,使目标数据成为一维数据。
下次编写代码之前请考虑阅读文档。
关于python - Keras 输出层出现意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45055079/