Python CNN的预测是通过测试集进行的,但不是自己的图像

Python CNN的预测是通过测试集进行的,但不是自己的图像,python,tensorflow,machine-learning,conv-neural-network,Python,Tensorflow,Machine Learning,Conv Neural Network,我试着做一个CNN性别分类器,它可以很好地处理测试集中的图像,但当我从谷歌输入iamges时,它总是分类为男性。我试着从他那里得到答案,但没有解决问题 data = pd.read_csv('/content/age_gender.csv') ## Converting pixels into numpy array data['pixels']=data['pixels'].apply(lambda x: np.array(x.split(), dtype="float32&qu

我试着做一个CNN性别分类器,它可以很好地处理测试集中的图像,但当我从谷歌输入iamges时,它总是分类为男性。我试着从他那里得到答案,但没有解决问题

data = pd.read_csv('/content/age_gender.csv')

## Converting pixels into numpy array
data['pixels']=data['pixels'].apply(lambda x:  np.array(x.split(), dtype="float32"))

classification = ['Male', 'Female']

X = np.array(data['pixels'].tolist())

## Converting pixels from 1D to 3D
X = X.reshape(X.shape[0],48,48,1)
X = X / 255.0

y = data['gender'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.22, random_state=37)

model = Sequential.....   # create the CNN and compile it
history = model.fit.....          # fit the model and evaluate it gives me val_accuracy: 0.8902

测试损耗:0.24722696840763092 测试精度:0.8912960290908813

当我使用下面的代码从测试集中预测图像时,效果很好

index = 5009
image = X_test[index]

pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)

print(classification[pred.argmax()])

但当我试图预测谷歌的图片时,它总是以男性的身份出现

file = "/content/female-2.jpeg"
image = cv.imread(file, cv.IMREAD_GRAYSCALE)

image = cv.resize(image, (48, 48))
image = image.reshape(1, 48, 48, 1)
image = image.astype('float32')
image = 255-image
image /= 255

pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)
print(classification[pred.argmax()])


我试过一大堆不同的女性形象,但都是男性形象。我在这里遗漏了什么?

与训练模型时相比,您对来自谷歌的图像进行了不同的预处理。像素值的标准化是导致问题的原因

image = 255-image
image /= 255
这应该是:

image /= 255.0

这可能是因为你在灰度图像上训练了模型。但是我正在把我输入的图像转换成灰度图像?这不应该吗?颜色对于这个用例来说确实有重要的特性。对于你目前的模型,你能画出ROC和AUC,看看它在假阳性时表现如何。我刚刚注意到了这一点,但你对来自谷歌的图像进行了不同的预处理。从图像中减去255,然后除以255。请尝试将其除以
255.0
。它也必须是一个浮点数。谢谢你,这似乎起到了作用。