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

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

图片示例:

http://img1.mukewang.com/61930bdc0001ab0902390313.jpghttp://img4.mukewang.com/61930be30001569102510312.jpg

我提供了以下代码:


#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)`



互换的青春
浏览 187回答 2
2回答

鸿蒙传说

该test_image需求由1./255一样被重新调整train_datagen和test_datagen。由于“好”在有更多白色区域时出现,因此较高的值test_image很可能使输出激活始终为“好”。

侃侃无极

我对 Keras 不熟悉,所以我会假设你的代码没有问题,并尝试在你的问题上给我两分钱。首先要检查数据集是否平衡。如果数据中的“好”图像相对过多,模型将只输出“好”,因为它产生的性能比实际预测的“正常”二元交叉熵损失更好。因此,您可以尝试的一件事是为两个标签赋予不同的权重(我们称之为加权交叉熵损失):惩罚被标记为“好”的错误答案,这样该模型现在将尝试预测“坏” “ 图片。如果这不起作用,您可以尝试其他方法来处理这种不平衡的数据集情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python