Prediksi CNN bekerja dari set pengujian tetapi tidak memiliki gambar

Jan 02 2021

Saya mencoba melakukan pengklasifikasi gender CNN dan berfungsi dengan baik dengan gambar dari set pengujian tetapi ketika saya memasukkan iamges dari google yang selalu mengklasifikasikan sebagai laki-laki. Saya mencoba mendapatkan jawabannya dari sini tetapi tidak menyelesaikannya.

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

Kerugian pengujian: 0.24722696840763092 Akurasi Pengujian: 0.8912960290908813

Ketika saya memprediksi gambar dari set pengujian menggunakan kode berikut, itu berfungsi dengan baik.

index = 5009
image = X_test[index]

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

print(classification[pred.argmax()])

Tetapi ketika saya mencoba memprediksi gambar dari google, itu selalu kembali sebagai laki-laki.

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()])

Saya telah mencoba sejumlah besar gambar berbeda yang perempuan dan SELALU kembali sebagai laki-laki. Apa yang kulewatkan di sini?

Jawaban

2 yudhiesh Jan 02 2021 at 10:34

Anda melakukan praproses gambar dari Google secara berbeda dibandingkan dengan saat Anda melatih model. Normalisasi nilai piksel inilah yang menyebabkan masalah.

image = 255-image
image /= 255

Ini seharusnya menjadi:

image /= 255.0