【发布时间】:2020-11-09 12:41:54
【问题描述】:
我训练了一个模型来分类不同的水果和蔬菜。我使用了来自 Kaggle-https://www.kaggle.com/moltean/fruits
的 Fruits-360 数据集该模型的准确度为 98%,是的,它正确地预测了我从测试数据集中提供的每张图像。但问题是当我给它一张来自互联网的随机水果图片或从手机捕获的图像时,它总是预测它是错误的。是什么原因造成的,如何解决?
这是python代码:
1 import cv2
from tensorflow.keras.models import Sequential, save_model, load_model
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
2 filepath = '../input/Models/my_model.h5'
3 train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
'../input/fruits/fruits-360/Training',
target_size=(100, 100),
batch_size=100,
class_mode='categorical')
test_generator = test_datagen.flow_from_directory(
'../input/fruits/fruits-360/Test',
target_size=(100, 100),
batch_size=100,
class_mode='categorical')
4 model = load_model(filepath, compile = True)
5 input_image_path = '../input/real-images/20200720_125831.jpg'
6 from PIL import Image
import numpy as np
from skimage import transform
def load(filename):
np_image = Image.open(filename)
np_image = np.array(np_image).astype('float32')/255
np_image = transform.resize(np_image, (100, 100, 3))
np_image = np.expand_dims(np_image, axis=0)
return np_image
7 image = load(input_image_path)
predictions=model.predict(image)
img=mpimg.imread(input_image_path)
imgplot = plt.imshow(img)
plt.show()
idx_to_name = {x:i for (x,i) in enumerate(train_generator.class_indices)}
idx_to_name[np.argmax(predictions)]
当预测图像来自测试数据集及其右侧时的输出 [1]:https://i.stack.imgur.com/9plUJ.png
当预测图像是从互联网上随机获取时的输出,你可以看到它的错误 [2]:https://i.stack.imgur.com/z4s6N.png
【问题讨论】:
-
您已将图像路径变量用作“input_image_path”,并使用变量“path”加载图像,并且给定代码中没有变量“path”。我很困惑。 rme你能说清楚吗?
-
哦抱歉这是我在编辑时的错误,路径是 input_image_path。我清除了错误顺便说一句
标签: python tensorflow keras deep-learning classification