CNN tahminleri test setinden çalışır ancak kendi resimlerinde çalışmaz

Jan 02 2021

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

2 yudhiesh Jan 02 2021 at 10:34

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