基于Tensorflow的Python-Keras图像识别模型.预测返回[[0.]]

2024-04-19 14:57:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在遵循教程here来处理猫的图像,并查看特定的图片是否包含猫。我使用的数据集是here。我在测试图像中的读取方式是否有遗漏?在我的结果中模型.预测(filePath),我在读取包含猫的图像时总是得到值“[[0.]]”。火车和验证集似乎工作正常。我只是在图像中阅读有问题。(源代码从here复制)

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras import backend as K
import numpy as np
from keras.preprocessing import image

# dimensions of our images.
img_width, img_height = 150, 150

train_data_dir = 'data/train'
validation_data_dir = 'data/validation'
nb_train_samples = 2000
nb_validation_samples = 800
epochs = 50
batch_size = 16

if K.image_data_format() == 'channels_first':
    input_shape = (3, img_width, img_height)
else:
    input_shape = (img_width, img_height, 3)

model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode='binary')

model.fit_generator(
    train_generator,
    steps_per_epoch=nb_train_samples // batch_size,
    epochs=epochs,
    validation_data=validation_generator,
    validation_steps=nb_validation_samples // batch_size)

model.save_weights('first_try.h5')


def _LoadImage(filePath):
    test_image = image.load_img(filePath, target_size = (150,150))
    test_image = image.img_to_array(test_image)
    test_image = np.expand_dims(test_image, axis=0)
    return test_image


test_this = _LoadImage('test.jpg')
result = model.predict(test_this)
print(result)

Tags: fromtestimageimportaddimgdatasize
1条回答
网友
1楼 · 发布于 2024-04-19 14:57:44

看起来“0”是猫的标签(“训练档案包含25000张猫狗图片。在这些文件上训练您的算法,并预测test1.zip(1=dog,0=cat)的标签,因此您的模型预测似乎是正确的。请记住,模型是预测(cat和dog)标签,而不是您自己可能与标签对应的类字符串。试着喂狗的形象,你应该得到“1”作为回报。你知道吗

相关问题 更多 >