Python ile AI - Derin Öğrenme
Yapay Sinir Ağı (YSA), ana teması biyolojik sinir ağları analojisinden ödünç alınan verimli bir bilgi işlem sistemidir. Sinir ağları, makine öğrenimi için bir tür modeldir. 1980'lerin ortasında ve 1990'ların başında, sinir ağlarında çok önemli mimari ilerlemeler kaydedildi. Bu bölümde, bir AI yaklaşımı olan Derin Öğrenme hakkında daha fazla bilgi edineceksiniz.
Derin öğrenme, bu alanda ciddi bir rakip olarak, on yılın patlayıcı hesaplamalı büyümesinden ortaya çıktı. Bu nedenle, derin öğrenme, algoritmaları insan beyninin yapısından ve işlevinden ilham alan belirli bir makine öğrenimidir.
Makine Öğrenimi v / s Derin Öğrenme
Derin öğrenme, bugünlerde en güçlü makine öğrenimi tekniğidir. O kadar güçlü ki, problemi nasıl çözeceklerini öğrenirken problemi temsil etmenin en iyi yolunu öğreniyorlar. Derin öğrenme ve Makine öğreniminin bir karşılaştırması aşağıda verilmiştir -
Veri Bağımlılığı
İlk fark noktası, veri ölçeği arttığında DL ve ML performansına dayanmaktadır. Veriler büyük olduğunda, derin öğrenme algoritmaları çok iyi performans gösterir.
Makine Bağımlılığı
Derin öğrenme algoritmalarının mükemmel çalışması için son teknoloji makinelere ihtiyacı vardır. Öte yandan, makine öğrenimi algoritmaları düşük kaliteli makinelerde de çalışabilir.
Özellik çıkarma
Derin öğrenme algoritmaları, yüksek seviyeli özellikleri çıkarabilir ve aynı şekilde öğrenmeye de çalışabilir. Öte yandan, makine öğrenimi ile çıkarılan özelliklerin çoğunu tanımlamak için bir uzmanın olması gerekir.
Yürütme Zamanı
Yürütme süresi, bir algoritmada kullanılan çok sayıda parametreye bağlıdır. Derin öğrenmenin, makine öğrenimi algoritmalarından daha fazla parametresi vardır. Dolayısıyla, DL algoritmalarının uygulama süresi, özellikle eğitim süresi, ML algoritmalarından çok daha fazladır. Ancak DL algoritmalarının test süresi, ML algoritmalarından daha azdır.
Problem Çözme Yaklaşımı
Derin öğrenme, problemi uçtan uca çözerken, makine öğrenimi problemi çözmek için geleneksel yöntemi kullanır, yani parçalara ayırarak.
Evrişimli Sinir Ağı (CNN)
Evrişimli sinir ağları, sıradan sinir ağları ile aynıdır çünkü bunlar aynı zamanda öğrenilebilir ağırlıklara ve önyargılara sahip nöronlardan oluşur. Sıradan sinir ağları, giriş verilerinin yapısını görmezden gelir ve tüm veriler, ağa beslenmeden önce 1 boyutlu diziye dönüştürülür. Bu işlem normal verilere uygundur, ancak veriler görüntü içeriyorsa işlem zahmetli olabilir.
CNN bu sorunu kolayca çözer. Görüntülerin 2D yapısını işlerken hesaba katarak görüntülere özgü özellikleri çıkarmalarına olanak tanır. Böylelikle CNN'lerin temel amacı, girdi katmanındaki ham görüntü verilerinden çıktı katmanında doğru sınıfa gitmektir. Sıradan bir NN'ler ile CNN'ler arasındaki tek fark, giriş verilerinin işlenmesinde ve katmanların tipindedir.
CNN'lerin Mimarisine Genel Bakış
Mimari olarak, sıradan sinir ağları bir girdi alır ve onu bir dizi gizli katman aracılığıyla dönüştürür. Her katman, nöronlar yardımıyla diğer katmana bağlanır. Sıradan sinir ağlarının temel dezavantajı, tam görüntülere iyi ölçeklenmemeleridir.
CNN'lerin mimarisi, genişlik, yükseklik ve derinlik olarak adlandırılan 3 boyutta düzenlenmiş nöronlara sahiptir. Mevcut katmandaki her nöron, önceki katmandan gelen çıktının küçük bir parçasına bağlanır. Üst üste bindirmeye benzer×giriş görüntüsünde filtre. KullanırMtüm ayrıntıları aldığınızdan emin olmak için filtreler. BunlarM filtreler, kenarlar, köşeler vb. gibi özellikleri çıkaran özellik çıkarıcılardır.
CNN'leri oluşturmak için kullanılan katmanlar
CNN'leri oluşturmak için aşağıdaki katmanlar kullanılır -
Input Layer - Ham görüntü verilerini olduğu gibi alır.
Convolutional Layer- Bu katman, hesaplamaların çoğunu yapan CNN'lerin temel yapı taşıdır. Bu katman, girişteki nöronlar ve çeşitli yamalar arasındaki kıvrımları hesaplar.
Rectified Linear Unit Layer- Önceki katmanın çıktısına bir aktivasyon işlevi uygular. Ağa doğrusal olmayanlık ekler, böylece her tür işleve iyi bir şekilde genelleme yapabilir.
Pooling Layer- Havuzlama, ağda ilerlerken yalnızca önemli parçaları tutmamıza yardımcı olur. Havuzlama katmanı, girdinin her derinlik diliminde bağımsız olarak çalışır ve onu uzamsal olarak yeniden boyutlandırır. MAX işlevini kullanır.
Fully Connected layer/Output layer - Bu katman, son katmandaki çıktı puanlarını hesaplar. Ortaya çıkan çıktı şu boyuttadır×× , burada L, sayı eğitim veri kümesi sınıflarıdır.
Yararlı Python Paketlerini Kurmak
Kullanabilirsiniz KerasPython'da yazılmış ve TensorFlow, CNTK veya Theno üzerinde çalışabilen üst düzey bir sinir ağları API'si olan. Python 2.7-3.6 ile uyumludur. Bunun hakkında daha fazla bilgi edinebilirsiniz.https://keras.io/.
Keras'ı kurmak için aşağıdaki komutları kullanın -
pip install keras
Açık conda ortam, aşağıdaki komutu kullanabilirsiniz -
conda install –c conda-forge keras
YSA kullanarak Doğrusal Regresör Oluşturma
Bu bölümde, yapay sinir ağlarını kullanarak bir doğrusal regresörün nasıl oluşturulacağını öğreneceksiniz. KullanabilirsinizKerasRegressorBunu başarmak için. Bu örnekte, Boston'daki mülkler için 13 sayısal Boston ev fiyatı veri kümesini kullanıyoruz. Aynısının Python kodu burada gösterilmektedir -
Gerekli tüm paketleri gösterildiği gibi içe aktarın -
import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
Şimdi, yerel dizine kaydedilen veri setimizi yükleyin.
dataframe = pandas.read_csv("/Usrrs/admin/data.csv", delim_whitespace = True, header = None)
dataset = dataframe.values
Şimdi, verileri giriş ve çıkış değişkenlerine bölün, yani X ve Y -
X = dataset[:,0:13]
Y = dataset[:,13]
Temel sinir ağlarını kullandığımız için modeli tanımlayın -
def baseline_model():
Şimdi modeli aşağıdaki gibi oluşturun -
model_regressor = Sequential()
model_regressor.add(Dense(13, input_dim = 13, kernel_initializer = 'normal',
activation = 'relu'))
model_regressor.add(Dense(1, kernel_initializer = 'normal'))
Ardından modeli derleyin -
model_regressor.compile(loss='mean_squared_error', optimizer='adam')
return model_regressor
Şimdi, tekrarlanabilirlik için rastgele tohumu aşağıdaki gibi düzeltin -
seed = 7
numpy.random.seed(seed)
Keras sarmalayıcı nesnesi scikit-learn regresyon tahmincisi olarak adlandırılır KerasRegressor. Bu bölümde bu modeli standartlaştırılmış veri seti ile değerlendireceğiz.
estimator = KerasRegressor(build_fn = baseline_model, nb_epoch = 100, batch_size = 5, verbose = 0)
kfold = KFold(n_splits = 10, random_state = seed)
baseline_result = cross_val_score(estimator, X, Y, cv = kfold)
print("Baseline: %.2f (%.2f) MSE" % (Baseline_result.mean(),Baseline_result.std()))
Yukarıda gösterilen kodun çıktısı, modelin görünmeyen veriler için problem üzerindeki performansının tahmini olacaktır. Çapraz doğrulama değerlendirmesinin tüm 10 katında ortalama ve standart sapma dahil olmak üzere ortalama kare hatası olacaktır.
Görüntü Sınıflandırıcı: Derin Öğrenme Uygulaması
Evrişimli Sinir Ağları (CNN'ler), bir görüntü sınıflandırma problemini, yani giriş görüntüsünün ait olduğu sınıfa çözer. Keras derin öğrenme kitaplığını kullanabilirsiniz. Aşağıdaki bağlantıdaki kedi ve köpeklerin eğitim ve test veri setini kullandığımızı unutmayın.https://www.kaggle.com/c/dogs-vs-cats/data.
Önemli keras kitaplıklarını ve paketlerini gösterildiği gibi içe aktarın -
Sıralı olarak adlandırılan aşağıdaki paket, sinir ağlarını sıralı ağ olarak başlatacaktır.
from keras.models import Sequential
Aşağıdaki paket aradı Conv2D CNN'nin ilk adımı olan evrişim işlemini gerçekleştirmek için kullanılır.
from keras.layers import Conv2D
Aşağıdaki paket aradı MaxPoling2D CNN'nin ikinci adımı olan havuzlama işlemini gerçekleştirmek için kullanılır.
from keras.layers import MaxPooling2D
Aşağıdaki paket aradı Flatten sonuçta ortaya çıkan tüm 2D dizileri tek bir uzun sürekli doğrusal vektöre dönüştürme işlemidir.
from keras.layers import Flatten
Aşağıdaki paket aradı Dense CNN'in dördüncü adımı olan sinir ağının tam bağlantısını gerçekleştirmek için kullanılır.
from keras.layers import Dense
Şimdi, sıralı sınıfın bir nesnesini oluşturun.
S_classifier = Sequential()
Şimdi, bir sonraki adım evrişim kısmını kodlamaktır.
S_classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
Buraya relu doğrultucu işlevidir.
Şimdi, CNN'nin bir sonraki adımı, evrişim kısmından sonra ortaya çıkan özellik haritalarında havuzlama işlemidir.
S-classifier.add(MaxPooling2D(pool_size = (2, 2)))
Şimdi, tüm havuzlanmış görüntüleri iltifat kullanarak sürekli bir vektöre dönüştürün -
S_classifier.add(Flatten())
Ardından, tamamen bağlantılı bir katman oluşturun.
S_classifier.add(Dense(units = 128, activation = 'relu'))
Burada 128 gizli birim sayısıdır. Gizli birimlerin sayısını 2'nin gücü olarak tanımlamak yaygın bir uygulamadır.
Şimdi çıktı katmanını aşağıdaki gibi başlatın -
S_classifier.add(Dense(units = 1, activation = 'sigmoid'))
Şimdi, CNN'yi derleyin, biz inşa ettik -
S_classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
Burada optimizer parametresi stokastik gradyan iniş algoritmasını seçmektir, kayıp parametresi kayıp fonksiyonunu seçmektir ve metrik parametresi performans metriğini seçmektir.
Şimdi, görüntü büyütme işlemleri gerçekleştirin ve ardından görüntüleri sinir ağlarına yerleştirin -
train_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set =
train_datagen.flow_from_directory(”/Users/admin/training_set”,target_size =
(64, 64),batch_size = 32,class_mode = 'binary')
test_set =
test_datagen.flow_from_directory('test_set',target_size =
(64, 64),batch_size = 32,class_mode = 'binary')
Şimdi, verileri oluşturduğumuz modele uydurun -
classifier.fit_generator(training_set,steps_per_epoch = 8000,epochs =
25,validation_data = test_set,validation_steps = 2000)
Burada steps_per_epoch, eğitim görüntülerinin sayısına sahiptir.
Şimdi model eğitildiği için, onu aşağıdaki gibi tahmin için kullanabiliriz -
from keras.preprocessing import image
test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg',
target_size = (64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0] == 1:
prediction = 'dog'
else:
prediction = 'cat'