Keras ile eğitilmiş modelin test verisi üzerinde tahmin çalışması

elimde eğitilmiş bir cnn modeli var .h5 dosyam var. test verim üzerinde tahmin yapıp overfitting durumunu kontrol etmek istiyorum lakin bu kodlama kısmını bir türlü beceremedim. yardımcı olabilecek varsa çok sevinirim. aşağıya kodları bıraktım bu durumda da PermissionError: [Errno 13] Permission denied: ‘dataset/test\angry’ hatası alıyorum

import numpy as np
from keras.models import load_model
from keras.preprocessing.image import load_img, img_to_array
import os

model = load_model(‘deneme6/model6_save.h5’)

test_veri_klasoru = ‘dataset//test’

dosya_listesi = os.listdir(test_veri_klasoru)

tahminler = []

for dosya in dosya_listesi:
dosya_yolu = os.path.join(test_veri_klasoru, dosya)
veri = load_img(dosya_yolu, target_size=(48, 48), color_mode=“grayscale”)
veri = img_to_array(veri)
veri = np.expand_dims(veri, axis=0)
veri = veri.astype(‘float32’)
veri /= 255.0
tahmin = model.predict(veri)
tahminler.append(np.argmax(tahmin))

print(“Tahminler:”, tahminler)

tam olarak nereyi beceremediniz? kodlarla birlikte gönderinizi desteklerseniz, size yardım etmek isteyenlere daha çok yardımcı olursunuz.

1 Beğeni

elimde eğitilmiş h5 dosyam mevcut. bu dosya ile test verim üzerinde tahmin yapmak istiyorum. bu kod akısını olusturamadım

yeniden düzenlediğiniz gönderiden anladığım kadarıyla, sanırım siz resim dosyasını değil resim klasörünü açmaya çalışıyorsunuz. ayrıca bu şekilde dizinlerle çalışmak kötü, hem bakımı ve yazımı da zor. kodda da kullandığınız gibi dizinleri os.path.join ile belirtin.

tahminimce test klasörünün içinde sınıf isimleri var. bu sınıf isimlerini öncelikle bir listeye atmanızı tavsiye ederim.

import numpy as np
from keras.models import load_model
from keras.preprocessing.image import load_img, img_to_array
import os

base_dir = os.getcwd()

model = load_model(
    os.path.join(base_dir, "deneme6", "model6_save.h5")
)

test_veri_klasoru = os.path.join(base_dir, "dataset", "test")
labels = os.listdir(test_veri_klasoru)

burada değişiklik yaptığım şey şu. sizin dosya listesi dediğiniz değişken, aslında test klasöründeki sınıf isimlerini listeliyor. şöyle olduğunu tahmin ediyorum:

dataset
|_ test
– |_ angry
– |_ sad
– |_ …

bunlar sınıfları, yani tahmin işlemi sonucu eşleştirilecek etiketlerden her birini temsil ediyor. ben de bu isimleri labels isimli listeye aktardım. resimler bu klasörlerin içerisindedir. ben de test klasörüne giriş yapıp tüm sınıf klasörleri üzerinde for döngüsü yaptım.

tahminler = []

for dosya in labels:
    # burada sınıf klasörlerinin içindeki resimleri yüklememiz gerekecek
    for image in os.listdir(test_veri_klasoru, dosya):
        resim_yolu = os.path.join(test_veri_klasoru, dosya, image)
        veri = load_img(resim_yolu, target_size=(48, 48), color_mode=“grayscale”)
        veri = img_to_array(veri)
        veri = np.expand_dims(veri, axis=0)
        veri = veri.astype(‘float32’)
        veri /= 255.0
        tahmin = model.predict(veri)
        tahminler.append(np.argmax(tahmin))

print(“Tahminler:”, tahminler)

tabi bunların hepsi tahminim üzerine yazdığım şeyler. sizin burada tahmin verilerini listeye atıp sonradan nasıl yorumlayacağınızı da merak ettim. yani tek tek tahminleme işlemi yapmak yerine, listeyi tek seferde verip çıktıları almak daha mantıklı. hem siz listeden bir anlam üretemezsiniz. ama modele liste olarak verirseniz sonuçları yorumlamak daha kolay olur.