首页 > 解决方案 > python中的图像分类总是得到相同的匹配分数

问题描述

我正在使用 tensorflow 学习图像分类。下面是我的程序。对于任何测试图像输入,我总是得到 100% 的匹配百分比。即我的模型总是预测 1。如果我一次又一次地经过,同一图像的另一个问题,它有时会给出不同的标签

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 = 'relu'))

classifier.compile(optimizer = 'adam', 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 张图像。

标签: pythontensorflowkeras

解决方案


推荐阅读