Tensorflow 为什么我的Keras图像分类预测总是返回一个值。。。?

Tensorflow 为什么我的Keras图像分类预测总是返回一个值。。。?,tensorflow,neural-network,keras,deep-learning,conv-neural-network,Tensorflow,Neural Network,Keras,Deep Learning,Conv Neural Network,我用CNN对多个人进行分类。人们的数量是114,每个人有大约120个图像数据集。 我使用keras和用于狗与猫分类的模型。 它适用于狗和猫的分类。 但这只是在不同的人物图像中返回相同的值 它说准确度为99.12,但不起作用 这是我的列车代码 #编码:utf-8 #在[1]中: 导入操作系统 进口cv2 将numpy作为np导入 从sklearn.preprocessing导入标签编码器 从sklearn.preprocessing导入OneHotEncoder 从sklearn.cross\u验

我用CNN对多个人进行分类。人们的数量是114,每个人有大约120个图像数据集。 我使用keras和用于狗与猫分类的模型。 它适用于狗和猫的分类。 但这只是在不同的人物图像中返回相同的值

它说准确度为99.12,但不起作用

这是我的列车代码

#编码:utf-8
#在[1]中:
导入操作系统
进口cv2
将numpy作为np导入
从sklearn.preprocessing导入标签编码器
从sklearn.preprocessing导入OneHotEncoder
从sklearn.cross\u验证导入序列测试\u分割
从keras导入后端为K
从keras导入图层、模型和优化器
从keras.preprocessing.image导入ImageDataGenerator、img_到_数组、数组_到_img
从keras.applications.resnet50导入预处理输入
从keras.utils导入np_utils
从numpy导入数组
#在[2]中:
列_DIR='/数据集'
train\u folder\u list=数组(os.listdir(train\u DIR))
#在[13]中:
X=[]
Y=[]
#在[14]中:
label_编码器=LabelEncoder()
整数编码=标签编码器。拟合变换(训练文件夹列表)
onehot_编码器=OneHotEncoder(稀疏=假)
整数编码=整数编码。重塑(len(整数编码),1)
onehot\u encoded=onehot\u编码器。拟合\u变换(整数\u编码)
对于idx,枚举中的索引(范围(len(列文件夹列表)):
path=os.path.join(列目录、列文件夹列表[索引])
路径=路径+'/'
img_list=os.listdir(路径)
对于img_列表中的img:
img_path=os.path.join(path,img)
img=cv2.imread(img\u路径)
如果img不是无:
img=cv2。调整大小(img,(100100))
img=img_到_阵列(img)
附加(img)
Y.append(idx)
X=np.array(X,dtype=“float”)/255.0
#在[15]中:
(X_序列,X_测试,Y_序列,Y_测试)=序列测试分割(X,Y,测试大小=0.2,随机状态=42)
Y_train=np_utils.to_categorical(Y_train,len(train_文件夹列表))
Y_测试=np_utils.to_Category(Y_测试,len(训练文件夹列表))
打印(X_列[0])
#在[17]中:
nb_系列样品=len(X_系列)
nb_有效性_样品=len(X_试验)
批量大小=32
#在[18]中:
打印(K.图像\数据\格式()
#在[19]中:
model=models.Sequential()
添加(layers.Conv2D(32,(3,3),输入_形状=(100100,3)))
model.add(layers.Activation('relu'))
添加(layers.MaxPooling2D(池大小=(2,2)))
添加(layers.Conv2D(32,(3,3)))
model.add(layers.Activation('relu'))
添加(layers.MaxPooling2D(池大小=(2,2)))
添加(layers.Conv2D(64,(3,3)))
model.add(layers.Activation('relu'))
添加(layers.MaxPooling2D(池大小=(2,2)))
model.add(layers.flatte())
模型.添加(层.密度(500))
model.add(layers.Activation('relu'))
模型.添加(层.退出(0.5))
模型.添加(层.密度(114))
model.add(layers.Activation('softmax'))
model.compile(loss='binary\u crossentropy',
优化器='rmsprop',
指标=[‘准确度’])
model.summary()
#在[20]中:
列车\数据发生器=图像数据发生器(
旋转范围=40,
宽度\偏移\范围=0.2,
高度\位移\范围=0.2,
重新缩放=1./255,
剪切范围=0.2,
缩放范围=0.2,
水平翻转=真,
填充模式(最近的)
test_datagen=ImageDataGenerator(
旋转范围=40,
宽度\偏移\范围=0.2,
高度\位移\范围=0.2,
重新缩放=1./255,
剪切范围=0.2,
缩放范围=0.2,
水平翻转=真,
填充模式(最近的)
#在[21]中:
序列生成器=序列数据生成流(X序列、Y序列、批次大小=批次大小)
测试生成器=测试数据生成流(X测试、Y测试、批次大小=批次大小)
打印(列车发电机)
#在[]中:
历史=model.fit\u生成器(
列车发电机,
每个历元的步数=nb\U序列样本//批量大小,
纪元=3,
验证数据=测试生成器,
验证步骤=nb验证样本//批量大小
)
model.save_weights('model_weights.h5'))
model.save('model_keras.h5'))
还有我的测试代码

从keras.models导入负载模型
进口cv2
从keras.applications.resnet50导入预处理输入
将numpy作为np导入
模型=负荷模型('model\u keras.h5')
img=cv2.imread('input_test.jpg'))
如果img不是无:
img=cv2.resize(img,(100100),插值=cv2.INTER_CUBIC)
img=np.重塑(img[1100100,3])
img=预处理输入(img)
类=模型。预测类(img)
打印(类)

二进制交叉熵
替换为
分类交叉熵
,如下所示:

model.compile(loss='classifical\u crossentropy',
优化器='rmsprop',
指标=[‘准确度’])

二进制交叉熵
替换为
分类交叉熵
,如下所示:

model.compile(loss='classifical\u crossentropy',
优化器='rmsprop',
指标=[‘准确度’])

为什么要在验证集上增加?您有一个softmax输出,也许您应该尝试model.predict\u proba,看看它的输出是什么样子?为什么要在验证集上增加?您有一个softmax输出,也许你应该试试model.predict_proba,看看它的输出是什么样子的?我如何提高精度在114个不同的类中形成良好的精度可能是一项困难的任务。你必须尝试许多不同的东西,看看什么是有效的…非常欢迎你接受答案-我如何才能提高准确度在114个不同的课程中形成良好的准确度可能是一项艰巨的任务。你必须尝试许多不同的东西,看看什么是有效的…非常欢迎你接受答案-