python中的图像分类预测不准确

python中的图像分类预测不准确,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在用tensorflow学习图像分类。下面是我的程序。对于同一个测试图像,如果我一次又一次地通过,它有时会给出不同的标签。这不是正确的预测 import tensorflow as tf import numpy as np import os from keras.models import Sequential from keras.layers.core import Dense, Dropout, Flatten,Activation from keras.layers.convol

我正在用tensorflow学习图像分类。下面是我的程序。对于同一个测试图像,如果我一次又一次地通过,它有时会给出不同的标签。这不是正确的预测

import tensorflow as tf
import numpy as np
import os
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Flatten,Activation
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.constraints import maxnorm
from keras.utils import np_utils



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(128 , kernel_initializer ='uniform' , activation = 'relu')) 
classifier.add(Dense(10 , kernel_initializer ='uniform' , activation = 'softmax'))

classifier.compile(optimizer = 'rmsprop', loss = 'categorical_crossentropy' , metrics = ['accuracy']) 


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(
        '/code/train',
        shuffle=True,
        target_size=(64,64),
        batch_size=5,
        class_mode='categorical',
        classes=["shiv", "kart", "nall","surendra","harshi","nag","saura","rajan","manoj","abhimanyu"])

test_set = test_datagen.flow_from_directory(
        '/code/validation',
        shuffle=True,
        target_size=(64,64),
        batch_size=5,
        class_mode='categorical',
        classes=["shiv", "kart", "nall","surendra","harshi","nag","saura","rajan","manoj","abhimanyu"])

from IPython.display import display
from PIL import Image

classifier.fit(
        training_set,
        steps_per_epoch=80,
        epochs=12,
        validation_data=test_set,
        validation_steps=100)


    from keras_preprocessing import image
    files_dir = '/code/test_image_clasification1'
    files = os.listdir(files_dir)
    np.set_printoptions(precision=3)
    for f in files:
        image_path = files_dir + '/' + f
        test_image = image.load_img(image_path,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)
        #classes = classifier.predict_classes(test_image)
        #print (classes)
        labels = ["shivaji","kartik","nallayan","surendar","harshita","nagendar","saurabh","rajan","manoj","abhimanyu"]
    indx = np.argmax(result)
    #score = np.argmax(np.round(result*100,2))
    #print(np.round(result,2))
    match_percentage=np.max(result)
    match_class=labels[indx]
    
    print("the image " + f + " is matching with "+ match_class + " having matching percentage  " +"{:.2%}".format(match_percentage) )
    #print(list(zip(labels,result)))
     #print(f,labelsindx])

如果模特训练出了什么问题,有人能帮我吗。作为参考,我在序列集中有122个图像,在验证集中有48个图像。

您可以尝试更改丢失和优化器

classifier.compile(optimizer = 'sgd', loss = 'sparse_categorical_crossentropy' , metrics = ['accuracy']) 


您需要对图像应用相同的重缩放因子,这是当前缺少的,因此会导致错误的概率预测。因此,您还需要通过对测试图像应用1./255来重新缩放到[0,1]。

他已经这样做了
test\u datagen=ImageDataGenerator(rescale=1./255)
不,test\u datagen是验证数据集,这与他稍后使用result=classifier.predict(test\u image)传递的测试图像无关。哦,我没有看到
test_image=image.img_to_array(test_image)/255
这就可以了。我刚刚看到OP已经有了这个问题,并且提到了这个错误,现在发布了这个代码,没有修复丢失的重新缩放,所以我猜即使添加了重新缩放,问题仍然会发生。“对于同一个测试图像,如果我一次又一次地通过,它有时会给出不同的标签”我无法重现此错误。使用一些示例数据,我从“keras_预处理导入图像”运行代码每次都得到了同样的结果。应该如此。您能否指定一遍又一遍地运行的代码以及得到的不同结果?我正在rabbitmq用户端运行上述代码。一旦它完成了培训并等待图像,我将提供从网络摄像头现场捕获的测试图像,并将其从制作方传递。同样的图像如果我花一些时间预测它与x类匹配的百分比,有时i=与y类匹配的百分比。。我也做了测试图像重缩放。虽然我没能把它寄出去。。问题仍然存在。。