Zephyrnet Logosu

Derin Öğrenme Modellerini Analiz Etme ve Karşılaştırma

Tarih:

Bu makale, Veri Bilimi Blogathon.

Derin Öğrenme, Makine Öğreniminin bir alt kümesidir. Derin Öğrenme, insan beynini taklit etmek için Yapay Sinir Ağları üzerine kuruludur. Derin öğrenmede, tahmine dayalı modelleme için verileri öğrenmek üzere en küçük ayrıntıları toplamak üzere birkaç gizli katman ekleriz.

Derin Öğrenme ne yazık ki, işlem gücü eksikliği herkesin harcı değildi. Günümüzün işlemci gücündeki üstel artışla, Derin Öğrenmeyi uygulamak çok popüler.

Derin İnanç Ağları, Derin Sinir Ağları ve Tekrarlayan Sinir Ağları, Derin Öğrenme Modellerinden bazılarıdır. Bu yazıda, CNN (Convolution Neural Network), DNN (Deep Neural Network) ve LSTM'den (Long Short-Term Memory) oluşan üç modeli karşılaştıracağız.

MNIST veri seti, görüntü tabanlı veri kümeleri üzerinde çalışmaya ve pratik yapmaya başlamanın en iyi yolu olduğundan, bu algoritmanın uygulanması, tıbbi bir görüntüde bir adım ileri gitmek, işaretleri sınıflandırmak ve tahmin etmektir. Aşağıdaki pratik uygulama, görüntü veri kümeleri üzerinde her boyutta çalışmak, uygulamak ve uygulamak için geniş kullanılabilirlik sergiler.

derin öğrenme
Kaynak: https://www.salesforce.com/eu/blog/2021/11/deep-learning.html

Veri Kümesi Onayı

Burada, 0 ile 9 arasında değişen el yazısıyla yazılmış rakamlardan oluşan MNIST veri setini kullanacağız. Bu veri seti, tahmin için eğitim seti ve test seti olmak üzere iki kısma ayrılacaktır. Sklearn kitaplığı kullanılarak, MNIST veri kümesi Jupyter not defterine aktarılacaktır.

derin öğrenme

Kaynak: https://en.wikipedia.org/wiki/MNIST_database

Uygulama

Uygulama Jüpyter'de yapılır Defter. Uygulamanın tamamı benim adresimde mevcuttur. Kaggle. Bağlantı aşağıda belirtilmiştir:

Not Defteri Bağlantısı: https://www.kaggle.com/code/shibumohapatra/cnn-dnn-lstm-comparison

Kitaplıklar Ön koşullar

Başlamak için, ilk olarak, algoritma için kütüphaneleri içe aktaracağız. Kütüphaneler ve kullanımları aşağıda belirtilmiştir:

  1. Dizi: dizilerle çalışmak
  2. Pandalar: veri işleme
  3. TensorFlow: tahmin için model izleme
  4. matplotlib: grafik çizmek için
  5. Keras: TensorFlow için API
  6. Tensorflow.keras.modelleri: bir makine öğrenimi modeli oluşturmak için. Sequential'ı içe aktaracağız (yalnızca bir giriş tensörü ve bir çıkış tensörü olan bir katman yığını).
  7. Sklearn.model: Verileri bir eğitim seti ve bir test seti olarak bölmek için
  8. Tensorflow.keras.katmanları: derin öğrenmeyi uygulamak için farklı katmanları içe aktarma. Katmanların açıklaması aşağıda belirtilmiştir -
    • Yoğun: ileri beslemeli sinir ağları oluşturmak, yani her girdi ve her çıktı karşılıklı olarak bağımlıdır.
    • Düzleştirmek: çok boyutlu tensörü serileştirme.
    • Bırakmak: fazla takmayı önlemek için.
    • dönş2D: görüntü verilerinin pikselleri arasındaki ilişkiyi sürdürmek için bir 2B evrişim katmanı.
    • Maksimum Havuzlama2D: uzamsal s'yi azaltmak
tensorflow.keras.models'den içe aktarma tensorflow.keras.layers'dan Sıralı içe aktarma tensorflow.keras.utils'den Conv2D, MaxPooling2D, Yoğun, Yassılaştırma, Bırakma, LSTM'yi içe aktarma

Veri Keşfi

Burada MNIST verilerini yükleyeceğiz ve onu 4 tren_x, tren_y, test_x ve test_y kümelerine ayıracağız. Bundan sonra, train_x ve test_x kümelerini normalleştireceğiz ve ilgili veri şekillerini yazdıracağız. Ardından, keşfin doğru olduğundan emin olmak için veri kümesini göstereceğiz. Veri kümesinin 4 görüntüsünü çizmek için bir for döngüsü uyguladım.

keras.veri kümelerinden içe aktarma mnist (train_x, train_y), (test_x, test_y) = mnist.load_data()
kod çıktısı
train_x = train_x.astype('float32') test_x = test_x.astype('float32') train_x /= 255 test_x /= 255 train_x = train_x.reshape(train_x.shape[0], 28, 28, 1) test_x = test_x .reshape(test_x.shape)
# tren seti print("train_x setinin şekli:",train_x.shape) print("train_y setinin şekli:",train_y.shape)
kod çıktısı

Tren, MNIST veri kümesinin şeklini belirledi

# test seti print("test_x setinin şekli:",test_x.shape) print("test_y setinin şekli:",test_y.shape)
kod çıktısı

Test, MNIST veri kümesinin şeklini belirledi

i için aralık(1): plt.subplot(330 + 1 + i) plt.imshow(train_x[i].reshape(28,28), cmap=plt.get_cmap('gray')) plt.axis(' kapalı') plt.show()
derin öğrenme

MNIST veri kümesinden ilk dört el yazısı rakam

Veri yükleniyor

Veri keşfini daha fazla uyguladığımızda, MNIST veri setini yüklemeli ve onu x_train, y_train, x_test ve y_test olmak üzere 4 bölüme ayırmalıyız. Ardından, bütünlüğünü korumak için eğitim ve test setini normalleştirin. Ardından normalleştirilmiş tren ve test setlerini iade edin.

DNN ve RNN (LSTM) için veri yükleme

DNN ve RNN (LSTM) için verileri def load_data_NN() işlevi ile yükleyeceğiz, veri setini yükleyeceğiz ve normalleştirmeyi gerçekleştireceğiz.

def load_data_NN(): # mnist veri kümesini yükle mnist = tf.keras.datasets.mnist # 28 x 28 resim 0-9 (x_train, y_train), (x_test, y_test) = mnist.load_data() # verileri normalleştir x_train = normalleştir (x_train, eksen = 1) x_test = normalleştir(x_test, eksen = 1) dönüş x_train, y_train, x_test, y_test

yükleme

CNN için def load_data_CNN() fonksiyonunu tanımlayacağız, veri setini yüke böleceğiz ve tren ve test setlerini yeniden şekillendireceğiz.

CNN'de yeniden şekillendirme ihtiyacı, bir evrişim katmanı, maksimum havuzlama, düzleştirme ve yoğun katmanlar içermesinden kaynaklanır. Burada tren ve test setleri 28 x 28 x 1 (28 sıra, 28 sütun, 1 renk kanalı) şeklinde yeniden şekillendirilir.

def load_data_CNN(): # load mnist veri kümesi mnist1 = tf.keras.datasets.mnist # 28-28 (x_train, y_train), (x_test, y_test) = mnist0.load_data() # verileri yeniden şekillendir x_train = x_train .reshape(x_train.shape[9], 1, 0, 28) x_test = x_test.reshape(x_test.shape[28], 1, 0, 28) # tam sayılardan yüzenlere dönüştür x_train = x_train.astype('float28' ) x_test = x_test.astype('float1') # verileri normalleştir x_train = normalleştir(x_train, eksen = 32) x_test = normalleştir(x_test, eksen = 32) dönüş x_train, y_train, x_test, y_test

Model 1'i Tanımla - DNN (Derin Sinir Ağı)

DNN, Yapay Sinir Ağlarına dayalıdır ve giriş ve çıkış katmanları arasında birkaç gizli katmana sahiptir. DNN, karmaşık doğrusal olmayan ilişkileri modelleme konusunda yetkindir. Burada asıl amaç, girdi vermek, girdi katmanında aşamalı hesaplamayı uygulamak ve sorunları çözmek için çıktıyı görüntülemek veya sunmaktır. Derin Sinir Ağları (DNN'ler), verilerin girdi katmanından çıktı katmanına geri gitmeden aktığı ve katmanlar arasındaki bağlantıların tek yönlü olduğu İleri Beslemeli Ağlar olarak kabul edilir. Bu, bu işlemin düğüme tekrar dokunmadan ilerlediği anlamına gelir.

derin öğrenme

Kaynak: https://www.ibm.com/cloud/learn/neural-networks

DNN için - sıralı, düzleştirilmiş ve 3 Yoğun katman uygulanmıştır. İlk iki yoğun katman için 128 düğümüm ve bir ReLU aktivasyon fonksiyonum var. Üçüncü yoğun katman için 10 düğüm ve bir softmax aktivasyon fonksiyonu tanımladım.

def DNN(): model_dnn = Sequential() model_dnn.add(Flatten()) # giriş katmanı model_dnn.add(Dense(128, aktivasyon = 'relu')) model_dnn.add(Dense(128, aktivasyon = 'relu') ) model_dnn.add(Dense(10, aktivasyon = 'softmax')) model_dnn.compile(optimizer= "adam",loss= "sparse_categorical_crossentropy", metrics=["accuracy"]) dönüş model_dnn

DNN modelini derlerken, Adam iyileştirici ve seyrek kategorik çapraz entropi (çıktı etiketine tamsayı değer atanan çok sınıflı kategorilere ayırma modelleri) kayıp fonksiyonlarını kullandım. Modelin doğruluğu metrikleri belirleyecektir.

Model 2'yi tanımlayın – RNN (LSTM)

RNN, zaman serisi verileri veya dizi verileri için çalışacak şekilde uyarlanmış, Tekrarlayan Sinir Ağı'nın kısa bir biçimidir.

Burada, RNN olarak kabul edilen LSTM'yi uygulayacağız. LSTM'ler (Uzun Kısa Süreli Bellek), uzun vadeli bağımlılıkları öğrenebilen özel bir RNN türüdür ve RNN'yi bir sonraki tahmini mantıklı kılmak için geçmişte olanları hatırlama konusunda parlak kılar.

LSTM'nin kullanılması, RNN'lerin uzun vadeli bağımlılıkları sorununu çözer. RNN, kelimeyi uzun vadeli bağımlılıklarda saklayamadı, ancak son bilgilere dayanarak, RNN daha doğru tahminde bulunabilir. Ancak boşluk uzunluğundaki artış nedeniyle, RNN optimum performansı veremez. Bunun çözümü ise bilgileri uzun süre saklayan ve bu sayede veri kaybının azaldığı LSTM'dir. LSTM uygulamaları, zaman serisi verilerini ve tahmini sınıflandırmak için kullanılır.

derin öğrenme

Kaynak: https://i.stack.imgur.com/h8HEm.png

DNN'ye gelince (LSTM) – LSTM katmanı, sıralı, Bırakma Katmanı (fazla uydurmayı önlemek için düğümlerin %0.2'si 20'dir) ve Yoğun Katman. Yukarıdaki katmanlar ReLU ve softmax aktivasyon fonksiyonlarına sahip olacaktır. LSTM modelini derlerken, Adam iyileştirici ve kayıp işlevini (seyrek kategorik çapraz entropi) kullandım. Modelin doğruluğu metrikleri belirleyecektir.

def RNN(input_shape): model_rnn = Sequential() model_rnn.add(LSTM(128, input_shape=input_shape, aktivasyon = 'relu', return_sequences=True)) model_rnn.add(Dropout(0.2)) model_rnn.add(LSTM(128) , input_shape=input_shape, aktivasyon = 'relu')) model_rnn.add(Bırakma(0.2)) model_rnn.add(Dense(32, aktivasyon = 'relu')) model_rnn.add(Bırakma(0.2)) model_rnn.add(Yoğun (10, aktivasyon = 'softmax')) model_rnn.compile(optimizer= "adam", kayıp= "sparse_categorical_crossentropy", metrics=["accuracy"]) dönüş model_rnn

Model 3'ü Tanımlayın - CNN (Evrişim Sinir Ağı)

CNN, Yapay Sinir Ağlarının bir kategorisidir. Derin Öğrenmede, CNN, nesne tanıma ve sınıflandırmada yaygın olarak kullanılır. CNN'nin kullanımıyla, Derin Öğrenme bir görüntüdeki nesneleri algılar. Evrişimli Sinir Ağları (CNN veya ConvNet), görsel görüntüleri analiz etmek için en yaygın olarak uygulanan bir derin sinir ağları sınıfıdır. CNN'lerin uygulamaları video anlama, konuşma tanıma ve NLP anlamadır. bu  CNN bir giriş katmanına, bir çıkış katmanına, bir veya daha fazla gizli katmana ve tonlarca parametreye sahiptir, bu da CNN'nin karmaşık kalıpları ve nesneleri öğrenmesine olanak tanır.

cnn | derin öğrenme

Kaynak: https://miro.medium.com/max/1400/1*uAeANQIOQPqWZnnuH-VEyw.jpeg

CNN için Conv2D katmanını, MaxPooling2D Katmanını ve Yoğun Katmanı ekleyerek Sequential'ı takip edeceğiz. ReLU ve softmax aktivasyon fonksiyonları yukarıdaki modellere benzer olacaktır. LSTM modelini derlerken, Adam iyileştirici ve kayıp işlevini (seyrek kategorik çapraz entropi) kullandım. Modelin doğruluğu metrikleri belirleyecektir.

def CNN(input_shape): model_cnn = Sequential() model_cnn.add(Conv2D(32, (3,3), input_shape = input_shape)) model_cnn.add(MaxPooling2D(pool_size=(2,2))) model_cnn.add(Düzleştir ()) # 3B özellik haritalarını 3B özellik vektörlerine dönüştürür model_cnn.add(Dense(100, aktivasyon='relu')) model_cnn.add(Dense(10, aktivasyon='softmax')) model_cnn.compile(loss="sparse_categorical_crossentropy) ", optimizer="adam", metrics=["accuracy"]) dönüş modeli_cnn

Tahmin Aşaması

Aşağıdaki uygulama, görüntü veri kümesinin belirli veya farklı bir dizininin tahmin edilen çıktısını tahmin etmemize ve kontrol etmemize yardımcı olur.

Artık veri setini, oluşturduğumuz modellerle eğitebilir ve test edebiliriz.

def sample_prediction(index): plt.imshow(x_test[index].reshape(28, 28),cmap='Greys') pred = model.predict(x_test[index].reshape(1, 28, 28, 1)) print(np.argmax(pred))

DNN Modeli Tahmini

Önce DNN'nin tahmin etmesi için, load_data_NN() işlevini yükleyeceğiz, yükleyeceğiz ve modeli 5 dönemle sığdıracağız. Bu model değerlendirmesi ve testinden sonra doğruluk elde edilir ve son olarak, modelin görüntüyü maksimum doğrulukla tahmin ettiğini doğrulamak için bir örnek görüntü tanımlayacağız.

if __name__ == "__main__": # verileri yükle x_train, y_train, x_test, y_test = load_data_NN() # modeli yükle model = DNN() print("nnModel Trainingn") model.fit(x_train, y_train, epochs = 5) print("nnModel Değerlendirmen") model.evaluate(x_test, y_test) puan1 = model.evaluate(x_test, y_test, verbose=1) print('n''DNN Model Test doğruluğu:', puan1[1]) print(" nnÖrnek Tahmin") sample_prediction(20)
DNN Modeli Tahmini

DNN Modeli Tahmini

RNN (LSTM) Model Tahmini

RNN (LSTM) ve DNN için yaklaşım, model için aynıdır.

if __name__ == "__main__": # x_train, y_train, x_test, y_test = load_data_NN() # yük modeli model = RNN(x_train.shape[1:]) print("nnModel Trainingn") model.fit(x_train, y_train, epochs = 5) print("nnModel Evaluationn") model.evaluate(x_test, y_test) skor2 = model.evaluate(x_test, y_test, verbose=1) print('n''RNN (LSTM) Model Test doğruluğu:' , puan2[1])
RNN (LSTM) Model Tahmini

RNN (LSTM) Model Tahmini

CNN Modeli Tahmini

CNN için load_data_CNN() fonksiyonunu yükleyeceğiz; CNN işlevi diğer ikisinden farklıdır çünkü konvolüsyon katmanına sahiptir, yoğun, düzleştirici vb. Train ve test setinin yanı sıra farklı boyutları da vardır. Bu kişiye özel işlev, CNN için faydalıdır.

if __name__ == "__main__": # x_train, y_train, x_test, y_test = load_data_CNN() # yük modeli input_shape = (28,28,1) model = CNN(input_shape) print("nnModel Trainingn") model.fit (x_train, y_train, epochs = 5) print("nnModel Evaluationn") model.evaluate(x_test, y_test) puan3 = model.evaluate(x_test, y_test, ayrıntılı=1) print('n''CNN Model Test doğruluğu:' , puan3[1]) print("nnÖrnek Tahmini") sample_prediction(20)
CNN Modeli Tahmini

CNN Modeli Tahmini

CNN işlevini yükledikten sonraki adım, modeli 5 dönemle sığdırmaktır. Bu model değerlendirmesi ve testinden sonra doğruluk elde edilir ve görüntüyü tahmin etmek için örnek bir girdi görüntüsü verir.

Model Doğruluklarını Karşılaştırma

Üç modeli uyguladıktan ve puanlarını aldıktan sonra, nihai bir ifadeye ulaşmak için bunları karşılaştırmak şarttır. Aşağıda belirtilen kod, modelleri en iyiden en az doğruluğa doğru belirten bir tablo formatı sunacaktır.

Kod, modelleri ve doğruluklarını bir dizi biçiminde çağırarak, bunları azalan düzende sıralayarak ve çıktıyı tablo biçiminde görüntüleyerek belirtir.

sonuçlar=pd.DataFrame({'Model':['DNN','RNN (LSTM)','CNN'], 'Doğruluk Puanı':[score1[1],score2[1],score3[1]]} ) result_df=results.sort_values(by='Doğruluk Puanı', artan=Yanlış) result_df=result_df.set_index('Model') result_df
Model doğruluk tablosu

Model doğruluk tablosu

Yukarıda oluşturulan tablo, RNN'nin (LSTM) tahmini maksimum doğruluk puanı ile yönlendirdiğini, CNN'nin ise 2'de olduğunu belirtir.nd yer ve DNN en düşük doğruluk puanına sahiptir.

Sonuç

Tüm yürütmeyi özetlemek için:

  1. Kütüphaneleri ithal ettik. Keşfedildi ve yüklendi Görüntülerden birkaçını çizerek veri kümesi.
  2. Daha sonra DNN, RNN (LSTM) ve CNN için iki özel yapım fonksiyon tanımladık.
  3. Derin Öğrenme modellerinin her biri için algoritmalar uyguladık.
  4. Ardından tüm Derin Öğrenme modelleri için tahmin aşamasına geçtik.
  5. Son olarak, hangi derin öğrenme modellerinin MNIST veri kümesi tahmini için uygun olduğunu bilmek için bir karşılaştırma tablosu yaptık.

Böylece, RNN (LSTM) modeli, %98.54 puan alarak tüm uygulamada kazanan oldu. CNN modeli 2 aldınd %98.08 ile üçüncü sırada ve DNN modeli 3. sırada yer alıyor.rd % 97.21 ile yer aldı. Nihai karşılaştırma tablosuyla birlikte, temel çıkarımlar şunlardır:

  • Hızlı uygulama süresi ile CNN modeli, eğitim için daha az parametre gerektirir ve model performansı korunur.
  • Daha hızlı yürütme ile DNN modeli, eğitim için en fazla parametreyi gerektirir, ancak model performansından daha az doğrulukla ödün verilir.
  • En yavaş yürütme süresi ile LSTM diğer ikisinden daha iyi performans gösterdi. Bu, LSTM'nin daha iyi performans göstermesine yarar.
  • Bu nedenle, yukarıdaki uygulamayla, Derin Öğrenmenin MNIST ve diğer görüntü veri kümeleriyle çalışması için LSTM modelinin uygun olduğu sonucuna varabiliriz.

Umarız bu makale, uygun Derin Öğrenme modellerini nasıl seçeceğinizi anlamanıza yardımcı olur. Teşekkürler.

Bu makalede gösterilen medya Analytics Vidhya'ya ait değildir ve Yazarın takdirine bağlı olarak kullanılır.

spot_img

En Son İstihbarat

spot_img