当前,使用CNN预测一些黑白图像的模型。该模型可以很好地满足我的要求。这是模型:
lr = 0.2
Adam(lr=lr, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.001)
classifier = Sequential()
# Step 1 - Convolution
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
dropout = 0.3
# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Dropout(rate=dropout))
# Adding a second convolutional layer
classifier.add(Conv2D(32, (3, 3), activation = 'sigmoid'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Dropout(rate=dropout))
classifier.add(Conv2D(32, (3, 3), activation = 'sigmoid'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Step 3 - Flattening
classifier.add(Flatten())
# Step 4 - Full connection
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
# Compiling the CNN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
epoch_number = 40
epochs = 25
steps_validation = 100
history = classifier.fit_generator(training_set,
steps_per_epoch = epoch_number,
epochs = epochs,
validation_data = test_set,
validation_steps = steps_validation)
classifier.save('epoch40epochs25softmax.h5')
现在,在训练了该模型之后,我想在“现实世界”中使用它,因此我有了一个使用它的保持集。问题是它只在我做错了classifier.predict_classes(test_image)
时才预测第1类,所以我试着对测试集中的所有元素都做classifier.predict_classes(test_image)
,因为我知道我的分数是75%在该集合上的准确性,并且仍然在执行以下操作:
for test_image in test_set_dir:
classifier.predict_classes(test_image)
我仍然只能得到非常接近[[1]]
的数字。我的问题是我是否正确使用了keras,否则,怎么回事?我应该得到一些[[0]]
分类。
我绝对确定该模型不会仅预测1类,因为我对这两个类分别进行了50%-50%的分配,并且我获得了75%的准确性。
编辑: 我正在对图像进行归一化
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0,
zoom_range = 0,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('datasetI/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
test_set = test_datagen.flow_from_directory('datasetI/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
如果我想在test_set上获得班级预测,应该怎么做?