PYTHONLA BİTKİ HASTALIKLARINI TANIYAN BİR SİNİR AĞI MODELİNİ EĞİTMEK VE DEĞERLENDİRMEK
Kaya Ridvan
PYTHONLA BİTKİ HASTALIKLARINI TANIYAN BİR SİNİR AĞI MODELİNİ EĞİTMEK VE DEĞERLENDİRMEK
# Gerekli kütüphaneleri içe aktarma
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Veri setini indirme ve yükleme
data_dir = "plantvillage"
zip_file = "plantvillage.zip"
# Dosya indirme kontrolü
if not os.path.exists(data_dir):
os.makedirs(data_dir)
!wget data.mendeley.com/public-files/datasets/tywbtsjrjv/files/d5652a28-c1d8-4b76-97f3-72fb80f94efc/{zip_file} -O {zip_file}
# Burada zip dosyasýný açma iþlemleri de ekleyebilirsiniz.
else:
print("Veri seti zaten indirildi ve açýldý.")
# Veri setini eðitim ve test alt kümelerine ayýrma
train_dir = "plantvillage/train"
test_dir = "plantvillage/test"
# Görüntüleri yeniden boyutlandýrma ve artýrma
i mg_size = 224 # Görüntü boyutu
batch_size = 32 # Küme boyutu
# Eðitim veri jeneratörü
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode="nearest"
)
# Test veri jeneratörü
test_datagen = ImageDataGenerator(rescale=1./255)
# Eðitim veri akýþý
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(i mg_size, i mg_size),
batch_size=batch_size,
class_mode="categorical"
)
# Test veri akýþý
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(i mg_size, i mg_size),
batch_size=batch_size,
class_mode="categorical"
)
# Sýnýf isimlerini almak için bir fonksiyon tanýmlama
def get_class_names():
classes = []
for subdir in sorted(os.listdir(train_dir)):
classes.append(subdir)
return classes
# Sýnýf isimlerini almak için fonksiyonu çaðýrma
class_names = get_class_names()
print(class_names)
# Model mimarisini oluþturma
model = keras.Sequential([
layers.Conv2D(32, (3, 3), activation="relu", input_shape=(i mg_size, i mg_size, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation="relu"),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(128, (3, 3), activation="relu"),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dropout(0.5),
layers.Dense(256, activation="relu"),
layers.Dense(len(class_names), activation="softmax")
])
# Modeli derleme
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
# Modeli eðitme
epochs = 10 # Eðitim döngüsü sayýsý
history = model.fit(
train_generator,
steps_per_epoch=len(train_generator),
epochs=epochs,
validation_data=test_generator,
validation_steps=len(train_generator) # veya validation_steps=None
)
# Eðitim ve doðrulama kaybý ve doðruluðunu görselleþtirme
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.plot(history.history["loss"], label="Eðitim Kaybý")
plt.plot(history.history["val_loss"], label="Doðrulama Kaybý")
plt.xlabel("Döngü")
plt.ylabel("Kayýp")
plt.legend()
plt.title("Eðitim ve Doðrulama Kaybý")
plt.subplot(1, 2, 2)
plt.plot(history.history["accuracy"], label="Eðitim Doðruluðu")
plt.plot(history.history["val_accuracy"], label="Doðrulama Doðruluðu")
plt.xlabel("Döngü")
plt.ylabel("Doðruluk")
plt.legend()
plt.title("Eðitim ve Doðrulama Doðruluðu")
plt.show()
# Modelin test verisi üzerindeki doðruluðunu hesaplama
test_loss, test_acc = model.evaluate(test_generator)
print("Test loss:", test_loss)
print("Test accuracy:", test_acc)
# Test verisinden rastgele birkaç örnek seçme
num_samples = 9 # Seçilecek örnek sayýsý
sample_images, sample_labels = next(test_generator) # Test veri akýþýndan bir küme almak
sample_indices = np.random.choice(range(batch_size), size=num_samples, replace=False) # Rastgele indeksler seçmek
sample_images = sample_images[sample_indices] # Seçilen örnek görüntüleri almak
sample_labels = sample_labels[sample_indices] # Seçilen örnek etiketleri almak
sample_predictions = model.predict(sample_images) # Seçilen örnekler için modelin tahminlerini almak
# Modelin tahminlerini ve gerçek etiketleri görselleþtirme
plt.figure(figsize=(10, 10))
for i in range(num_samples):
plt.subplot(3, 3, i+1)
plt.imshow(sample_images[i])
pred_class = np.argmax(sample_predictions[i]) # Tahmin edilen sýnýfý almak
true_class = np.argmax(sample_labels[i]) # Gerçek sýnýfý almak
color = "green" if pred_class == true_class else "red" # Tahminin doðru veya yanlýþ olmasýna göre renk belirlemek
plt.title(f"Tahmin: {class_names[pred_class]}
Gerçek: {class_names[true_class]}", color=color)
plt.axis("off")
plt.show()
Bu Python kodu, bitki hastalýklarýný tanýyan bir derin öðrenme modeli oluþturmak için TensorFlow ve Keras kütüphanelerini kullanýr. Ýþte kodun adým adým açýklamasý:
1. Gerekli Kütüphanelerin Ýçe Aktarýlmasý:
- `os`, `numpy`, `pandas`, `matplotlib.pyplot`, `tensorflow`, ve `keras` gibi gerekli kütüphaneler içe aktarýlýr.
- Resim verilerini iþlemek için `ImageDataGenerator` sýnýfý da içe aktarýlýr.
2. Veri Setinin Ýndirilmesi ve Yüklenmesi:
- Veri seti "plantvillage" dizinine indirilir. Bu dizin daha önce oluþturulmuþ deðilse, veri seti zip dosyasýyla birlikte indirilir ve dizin oluþturularak içeriði çýkarýlýr.
3. Veri Setinin Eðitim ve Test Alt Kümelerine Ayrýlmasý:
- Veri seti, eðitim ve test veri kümelerine ayrýlýr.
4. Görüntüleri Yeniden Boyutlandýrma ve Artýrma:
- Eðitim verileri için `ImageDataGenerator` kullanýlarak görüntüler yeniden boyutlandýrýlýr ve çeþitli artýrma teknikleri uygulanýr.
- Test verileri ise sadece yeniden boyutlandýrýlýr.
5. Eðitim ve Test Veri Akýþlarý Oluþturulmasý:
- `flow_from_directory` fonksiyonu kullanýlarak eðitim ve test veri akýþlarý oluþturulur.
6. Sýnýf Ýsimlerinin Alýnmasý:
- Eðitim veri dizinindeki alt dizin isimleri, sýnýf isimlerini içeren bir liste elde etmek için bir fonksiyon tanýmlanýr.
7. Model Mimarisi Oluþturulmasý:
- Bir Convolutional Neural Network (CNN) modeli, Conv2D ve MaxPooling2D katmanlarýyla birlikte Flatten, Dropout ve Dense katmanlarý kullanýlarak oluþturulur.
8. Modelin Derlenmesi:
- Modelin optimizasyon, kayýp fonksiyonu ve deðerlendirme metrikleri belirlenerek derlenir.
9. Modelin Eðitilmesi:
- Oluþturulan model, eðitim veri akýþý kullanýlarak belirli sayýda döngüde eðitilir.
10. Eðitim ve Doðrulama Ýstatistiklerinin Görselleþtirilmesi:
- Eðitim ve doðrulama kayýplarý ile doðruluk deðerleri matplotlib kütüphanesi kullanýlarak görselleþtirilir.
11. Test Verisi Üzerinde Modelin Deðerlendirilmesi:
- Eðitilen model, test veri akýþý kullanýlarak deðerlendirilir ve kayýp ile doðruluk sonuçlarý yazdýrýlýr.
12. Rastgele Örneklerin Görselleþtirilmesi:
- Test veri akýþýndan rastgele seçilen örnekler, modelin tahminleri ve gerçek etiketleri ile birlikte görselleþtirilir.
13. Modelin Test Verisi Üzerindeki Doðruluðunun Görselleþtirilmesi:
- Test verisi üzerinde modelin performansýný gösteren bir görsel oluþturulur. Bu, kayýp ve doðruluk deðerlerini içerir.
14. Modelin Performansýnýn Görselleþtirilmesi:
- Eðitim ve doðrulama kaybý ile doðruluk deðerlerini gösteren bir grafik oluþturulur. Bu, modelin genel performansýný deðerlendirmeye yardýmcý olur.
15. Test Verisinden Rastgele Örneklerin Seçilmesi:
- Test veri akýþýndan rastgele bir küme alýnýr ve bu örnekler üzerinde modelin tahminleri görselleþtirilir.
16. Modelin Tahminlerinin ve Gerçek Etiketlerin Görselleþtirilmesi:
- Seçilen örneklerin üzerinde modelin yaptýðý tahminler ile gerçek etiketleri karþýlaþtýran bir görsel oluþturulur. Doðru tahminler yeþil, yanlýþ tahminler ise kýrmýzý renkte gösterilir.
Bu kod, bitki hastalýklarýný tanýyan bir sinir aðý modelini eðitmek ve deðerlendirmek için kullanýlýr. Öðrenme iþlemi sýrasýnda, eðitim ve doðrulama verileri üzerindeki performans metrikleri görselleþtirilir. Ayrýca, modelin test verisi üzerindeki doðruluðu ve rastgele örnekler üzerindeki tahminleri görsel olarak kontrol edilir.
Sosyal Medyada Paylaşın:
(c) Bu şiirin her türlü telif hakkı şairin kendisine ve/veya temsilcilerine aittir.