CNN भविष्यवाणियां परीक्षण सेट से काम करती हैं, लेकिन स्वयं की छवियां नहीं
Im एक 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()])
मैंने विभिन्न चित्रों की एक पूरी गुच्छा की कोशिश की है जो मादा हैं और यह हमेशा नर के रूप में वापस आता है। मुझे यहां क्या समझ नहीं आ रहा है?
जवाब
जब आप मॉडल को प्रशिक्षित करते हैं तो आप Google से छवियों को अलग तरह से दिखाते हैं। पिक्सेल मानों का सामान्यीकरण समस्या का कारण बनता है।
image = 255-image
image /= 255
इसके बजाय यह होना चाहिए:
image /= 255.0