การคาดคะเนของ CNN ทำงานจากชุดทดสอบ แต่ไม่ใช่ภาพของตัวเอง
ฉันพยายามทำตัวจำแนกเพศของ CNN และใช้งานได้ดีกับภาพจากชุดทดสอบ แต่เมื่อฉันป้อน iamges จาก google จะจัดประเภทเป็นเพศชาย ฉันพยายามหาคำตอบจากที่นี่แต่ไม่สามารถแก้ปัญหาได้
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()])
แต่พอลองทายภาพจาก google ก็มักจะกลับมาเป็นผู้ชายเสมอ
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()])
ฉันได้ลองใช้รูปภาพที่แตกต่างกันมากมายที่เป็นผู้หญิงและมักจะกลับมาเป็นเพศชาย ฉันพลาดอะไรไปที่นี่?
คำตอบ
2 yudhiesh
คุณประมวลผลรูปภาพจาก Google ล่วงหน้าแตกต่างจากเวลาที่คุณฝึกโมเดล การปรับค่าพิกเซลให้เป็นมาตรฐานคือสาเหตุของปัญหา
image = 255-image
image /= 255
สิ่งนี้ควรเป็น:
image /= 255.0