- 173 Okunma
- 0 Yorum
- 0 Beğeni
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
img_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=(img_size, img_size),
batch_size=batch_size,
class_mode="categorical"
)
# Test veri akışı
test_generator = test_datagen.flow_from_directory(
test_dir,
target_size=(img_size, img_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=(img_size, img_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()
#Yazan Rıdvan Kaya
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. Kod adım adım şöyle açıklanabilir:
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.
YORUMLAR
Henüz yorum yapılmamış.