python - 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 张图像。
解决方案
推荐阅读
- c# - 根据 HttpRequest 模拟属性
- react-native - React Native:在承诺之外重用承诺参数?
- visual-studio-2017 - 由于路径太长,Nuget 安装失败
- oracle - Oracle:使用 Out 参数调用 SP
- java - 如何使用 Spark StructuredStream API 从 kafka 反序列化 java 对象,没有 Avro 或 Json?
- javascript - 如何将 jquery 变量添加到 span 类属性中?
- python - Dataframe.sample - 权重 - 如何使用它?
- sql-server - 无法在 Scintific Linux 7.5 上使用 pyodbc 连接到 MS SQL Server
- python-3.x - 在 stderr 中打印的 for 循环之后打印一个字符串
- arrays - VBA使用Like运算符在数组中查找字符串不起作用