CNN tahminleri test setinden çalışır ancak kendi resimlerinde çalışmaz
Bir CNN cinsiyet sınıflandırıcısı yapmaya çalışıyorum ve test setindeki resimlerle iyi çalışıyor, ancak google'dan iamges girdiğimde her zaman erkek olarak sınıflandırılıyor. Cevabı buradan almaya çalıştım ama çözmedi.
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
Test kaybı: 0.24722696840763092 Test Doğruluğu: 0.8912960290908813
Aşağıdaki kodu kullanarak test setinden bir görüntü tahmin ettiğimde iyi çalışıyor.
index = 5009
image = X_test[index]
pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)
print(classification[pred.argmax()])
Ancak google'dan görüntüleri tahmin etmeye çalıştığımda her zaman erkek olarak geri dönüyor.
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()])
Kadın olan bir sürü farklı görüntü denedim ve HER ZAMAN erkek olarak geri geliyor. Burada neyi özlüyorum?
Yanıtlar
Google'daki görüntüleri, modeli eğittiğiniz zamana kıyasla farklı şekilde önceden işlersiniz. Piksel değerlerinin normalleşmesi, soruna neden olan şeydir.
image = 255-image
image /= 255
Bunun yerine şöyle olmalıdır:
image /= 255.0