繁体   English   中英

预测模型仅在保留集的keras上提供一类

[英]Predictive model giving only one class on holdout set keras

当前,使用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)时才预测类classifier.predict_classes(test_image)我发现做错了什么,所以我尝试对测试集中的所有元素进行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上获得类预测,应该怎么做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM