首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Tensorflow图像分类Python总是说相同的答案

Tensorflow图像分类Python总是说相同的答案
EN

Stack Overflow用户
提问于 2019-02-22 04:54:06
回答 2查看 244关注 0票数 1

我为我的一个类写了一个图像识别代码。我正在对“好”和“坏”的心脏超声图像进行分类。我遇到的问题是分类器总是预测图像是“好的”。我目前没有太多的图像要排序,所以准确率只有50%左右,但是我不确定为什么机器总是认为图像是好的。

图片示例:

Here is a bad image

Here is a good image

有什么建议吗?我提供了以下代码:

代码语言:javascript
复制
#required imports

#using sequential from tensorflow 

from keras.models import Sequential

from keras.layers import Conv2D

from keras.layers import MaxPooling2D

from keras.layers import Flatten

from keras.layers import Dense


#classification model to be sequential
classifier = Sequential()

classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))

#output layer
classifier.add(Dense(units = 1, activation = 'sigmoid'))

#compilation
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

#training
from keras.preprocessing.image import ImageDataGenerator

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("/home/jovyan/dataset/training_set/", target_size = (64, 64), batch_size = 32, class_mode = 'binary')

test_set = test_datagen.flow_from_directory("/home/jovyan/dataset/test_set/", target_size = (64, 64), batch_size = 32, class_mode = 'binary')

classifier.fit_generator(training_set, steps_per_epoch = 85, epochs = 25, validation_data=test_set, validation_steps=2000)

#predictions
import numpy as np
from keras.preprocessing import image
test_image=image.load_img("/home/jovyan/dataset/test_set/test_bad_1.jpg", target_size=(64, 64))
test_image=image.img_to_array(test_image)
test_image=np.expand_dims(test_image, axis=0)
result=classifier.predict(test_image)
training_set.class_indices

if result[0][0]==1:
    prediction='good'
else:
    prediction='bad'

print(prediction)`
EN

回答 2

Stack Overflow用户

发布于 2019-02-22 05:04:57

我不熟悉Keras,所以我将假定您的代码中没有问题,并尝试在您的问题上给出我的两点看法。

首先要检查的是数据集是否平衡。如果数据中有相对过多的“好”图像,模型将只输出“好”,因为它产生了比实际预测“正常”的二进制交叉熵损失更好的性能。

因此,你可以尝试给两个标签不同的权重(我们称之为加权交叉熵损失):惩罚被标记为“好”的不正确答案,这样模型现在就会尝试预测“坏”图像。

如果这不起作用,您可以尝试使用other ways来处理这种不平衡的数据集情况。

票数 0
EN

Stack Overflow用户

发布于 2019-02-22 05:16:46

train_datagentest_datagen一样,test_image需要按1./255重新缩放。由于“好”出现在有更多白色区域时,test_image中较高的值可能会使输出激活饱和,使其始终为“好”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54816056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档