You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/tr/3-Web-App/1-Web-App/README.md

16 KiB

Bir ML Modelini Kullanmak için Bir Web Uygulaması Oluşturun

Bu derste, NUFORC'un veritabanından alınan son yüzyıldaki UFO gözlemleri verileri üzerinde bir ML modeli eğiteceksiniz.

Öğrenecekleriniz:

  • Eğitilmiş bir modeli 'pickle'lama
  • Bu modeli bir Flask uygulamasında kullanma

Verileri temizlemek ve modelimizi eğitmek için defterleri kullanmaya devam edeceğiz, ancak süreci bir adım öteye taşıyarak modeli bir web uygulamasında kullanmayı keşfedebilirsiniz.

Bunu yapmak için Flask kullanarak bir web uygulaması oluşturmanız gerekecek.

Ders Öncesi Test

Bir Uygulama Oluşturma

Makine öğrenimi modellerini tüketmek için web uygulamaları oluşturmanın birkaç yolu vardır. Web mimariniz, modelinizin nasıl eğitildiğini etkileyebilir. Bir işletmede çalıştığınızı ve veri bilimi ekibinin bir model eğittiğini ve bu modeli bir uygulamada kullanmanızı istediğini hayal edin.

Dikkate Alınması Gerekenler

Sormanız gereken birçok soru var:

  • Bu bir web uygulaması mı yoksa mobil uygulama mı? Eğer bir mobil uygulama geliştiriyorsanız veya modeli bir IoT bağlamında kullanmanız gerekiyorsa, TensorFlow Lite kullanabilir ve modeli bir Android veya iOS uygulamasında kullanabilirsiniz.
  • Model nerede barındırılacak? Bulutta mı yoksa yerel olarak mı?
  • Çevrimdışı destek. Uygulama çevrimdışı çalışmak zorunda mı?
  • Modeli eğitmek için hangi teknoloji kullanıldı? Seçilen teknoloji, kullanmanız gereken araçları etkileyebilir.
    • TensorFlow kullanımı. Örneğin, TensorFlow kullanarak bir model eğitiyorsanız, bu ekosistem, bir web uygulamasında kullanılmak üzere bir TensorFlow modelini TensorFlow.js kullanarak dönüştürme yeteneği sağlar.
    • PyTorch kullanımı. Eğer PyTorch gibi bir kütüphane kullanarak bir model oluşturuyorsanız, modeli ONNX (Open Neural Network Exchange) formatında dışa aktarma seçeneğiniz vardır. Bu format, Onnx Runtime kullanabilen JavaScript web uygulamalarında kullanılabilir. Bu seçenek, Scikit-learn ile eğitilmiş bir model için ilerideki bir derste keşfedilecektir.
    • Lobe.ai veya Azure Custom Vision kullanımı. Eğer bir ML SaaS (Hizmet Olarak Yazılım) sistemi olan Lobe.ai veya Azure Custom Vision kullanarak bir model eğitiyorsanız, bu tür yazılımlar, modeli birçok platform için dışa aktarma yolları sağlar. Buna, çevrimiçi uygulamanız tarafından bulutta sorgulanabilecek özel bir API oluşturma da dahildir.

Ayrıca, bir web tarayıcısında modeli kendisi eğitebilecek bir Flask web uygulaması oluşturma fırsatınız da var. Bu, JavaScript bağlamında TensorFlow.js kullanılarak da yapılabilir.

Bizim amacımız için, Python tabanlı defterlerle çalıştığımızdan, eğitilmiş bir modeli böyle bir defterden Python ile oluşturulmuş bir web uygulaması tarafından okunabilir bir formata dışa aktarmak için gereken adımları inceleyelim.

Araçlar

Bu görev için iki araca ihtiyacınız var: Flask ve Pickle, her ikisi de Python üzerinde çalışır.

Flask nedir? Yaratıcıları tarafından bir 'mikro-çerçeve' olarak tanımlanan Flask, Python kullanarak web çerçevelerinin temel özelliklerini ve web sayfaları oluşturmak için bir şablon motoru sağlar. Flask ile uygulama geliştirmeyi pratik etmek için bu Öğrenme modülüne göz atın.

Pickle nedir? Pickle 🥒, bir Python nesne yapısını serileştiren ve serileştirmeyi kaldıran bir Python modülüdür. Bir modeli 'pickle'ladığınızda, yapısını webde kullanım için serileştirir veya düzleştirirsiniz. Dikkatli olun: pickle doğası gereği güvenli değildir, bu yüzden bir dosyayı 'un-pickle'lamanız istendiğinde dikkatli olun. Picklelanmış bir dosya .pkl uzantısına sahiptir.

Alıştırma - Verilerinizi Temizleyin

Bu derste, NUFORC (Ulusal UFO Raporlama Merkezi) tarafından toplanan 80.000 UFO gözlemi verilerini kullanacaksınız. Bu verilerde UFO gözlemlerine dair ilginç açıklamalar bulunuyor, örneğin:

  • Uzun örnek açıklama. "Gece bir çimenlik alana ışık huzmesiyle inen bir adam, Texas Instruments otoparkına doğru koşuyor."
  • Kısa örnek açıklama. "Işıklar bizi kovaladı."

ufos.csv elektronik tablosu, gözlemin gerçekleştiği şehir, eyalet ve ülke, nesnenin şekli ve enlem ile boylam bilgilerini içeren sütunlar içerir.

Bu derste yer alan boş notebook dosyasında:

  1. Daha önceki derslerde olduğu gibi pandas, matplotlib ve numpy modüllerini içe aktarın ve UFO elektronik tablosunu yükleyin. Örnek bir veri setine göz atabilirsiniz:

    import pandas as pd
    import numpy as np
    
    ufos = pd.read_csv('./data/ufos.csv')
    ufos.head()
    
  2. UFO verilerini yeni başlıklarla küçük bir veri çerçevesine dönüştürün. Country alanındaki benzersiz değerleri kontrol edin.

    ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']})
    
    ufos.Country.unique()
    
  3. Şimdi, ele almamız gereken veri miktarını azaltmak için boş değerleri düşürerek ve yalnızca 1-60 saniye arasındaki gözlemleri içe aktararak verileri azaltabilirsiniz:

    ufos.dropna(inplace=True)
    
    ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)]
    
    ufos.info()
    
  4. Ülkeler için metin değerlerini bir sayıya dönüştürmek için Scikit-learn'ün LabelEncoder kütüphanesini içe aktarın:

    LabelEncoder verileri alfabetik olarak kodlar

    from sklearn.preprocessing import LabelEncoder
    
    ufos['Country'] = LabelEncoder().fit_transform(ufos['Country'])
    
    ufos.head()
    

    Verileriniz şu şekilde görünmelidir:

    	Seconds	Country	Latitude	Longitude
    2	20.0	3		53.200000	-2.916667
    3	20.0	4		28.978333	-96.645833
    14	30.0	4		35.823889	-80.253611
    23	60.0	4		45.582778	-122.352222
    24	3.0		3		51.783333	-0.783333
    

Alıştırma - Modelinizi Oluşturun

Şimdi, verileri eğitim ve test gruplarına ayırarak bir model eğitmeye hazır olabilirsiniz.

  1. X vektörünüz olarak eğitmek istediğiniz üç özelliği seçin ve y vektörü Country olacaktır. Seconds, Latitude ve Longitude girdilerini alıp bir ülke kimliği döndürmek istiyorsunuz.

    from sklearn.model_selection import train_test_split
    
    Selected_features = ['Seconds','Latitude','Longitude']
    
    X = ufos[Selected_features]
    y = ufos['Country']
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
    
  2. Modelinizi lojistik regresyon kullanarak eğitin:

    from sklearn.metrics import accuracy_score, classification_report
    from sklearn.linear_model import LogisticRegression
    model = LogisticRegression()
    model.fit(X_train, y_train)
    predictions = model.predict(X_test)
    
    print(classification_report(y_test, predictions))
    print('Predicted labels: ', predictions)
    print('Accuracy: ', accuracy_score(y_test, predictions))
    

Doğruluk oranı fena değil (%95 civarında), şaşırtıcı değil, çünkü Country ve Latitude/Longitude arasında bir ilişki var.

Oluşturduğunuz model çok devrimsel değil, çünkü bir ülkeyi Latitude ve Longitude değerlerinden çıkarabilmelisiniz, ancak bu, temizlediğiniz ham verilerden bir model eğitme, dışa aktarma ve ardından bu modeli bir web uygulamasında kullanma alıştırması yapmak için iyi bir egzersizdir.

Alıştırma - Modelinizi 'Pickle'layın

Şimdi, modelinizi _pickle_lama zamanı! Bunu birkaç satır kodla yapabilirsiniz. Model _pickle_landıktan sonra, picklelanmış modeli yükleyin ve saniye, enlem ve boylam değerlerini içeren bir örnek veri dizisine karşı test edin.

import pickle
model_filename = 'ufo-model.pkl'
pickle.dump(model, open(model_filename,'wb'))

model = pickle.load(open('ufo-model.pkl','rb'))
print(model.predict([[50,44,-12]]))

Model '3' döndürüyor, bu da Birleşik Krallık'ın ülke kodu. Harika! 👽

Alıştırma - Bir Flask Uygulaması Oluşturun

Şimdi, modelinizi çağırıp benzer sonuçları daha görsel olarak hoş bir şekilde döndüren bir Flask uygulaması oluşturabilirsiniz.

  1. notebook.ipynb dosyasının yanına web-app adlı bir klasör oluşturun ve ufo-model.pkl dosyanız burada bulunsun.

  2. Bu klasörde üç klasör daha oluşturun: static (içinde bir css klasörü ile) ve templates. Şimdi aşağıdaki dosya ve dizinlere sahip olmalısınız:

    web-app/
      static/
        css/
      templates/
    notebook.ipynb
    ufo-model.pkl
    

    Bitmiş uygulamanın görünümünü görmek için çözüm klasörüne bakın

  3. web-app klasöründe oluşturulacak ilk dosya requirements.txt dosyasıdır. Bir JavaScript uygulamasındaki package.json gibi, bu dosya uygulama tarafından gereken bağımlılıkları listeler. requirements.txt dosyasına şu satırları ekleyin:

    scikit-learn
    pandas
    numpy
    flask
    
  4. Şimdi, bu dosyayı çalıştırmak için web-app dizinine gidin:

    cd web-app
    
  5. Terminalinizde pip install yazarak requirements.txt dosyasında listelenen kütüphaneleri yükleyin:

    pip install -r requirements.txt
    
  6. Şimdi, uygulamayı tamamlamak için üç dosya daha oluşturabilirsiniz:

    1. Kök dizinde app.py oluşturun.
    2. templates dizininde index.html oluşturun.
    3. static/css dizininde styles.css oluşturun.
  7. styles.css dosyasını birkaç stil ile oluşturun:

    body {
    	width: 100%;
    	height: 100%;
    	font-family: 'Helvetica';
    	background: black;
    	color: #fff;
    	text-align: center;
    	letter-spacing: 1.4px;
    	font-size: 30px;
    }
    
    input {
    	min-width: 150px;
    }
    
    .grid {
    	width: 300px;
    	border: 1px solid #2d2d2d;
    	display: grid;
    	justify-content: center;
    	margin: 20px auto;
    }
    
    .box {
    	color: #fff;
    	background: #2d2d2d;
    	padding: 12px;
    	display: inline-block;
    }
    
  8. Ardından, index.html dosyasını oluşturun:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>🛸 UFO Appearance Prediction! 👽</title>
        <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
      </head>
    
      <body>
        <div class="grid">
    
          <div class="box">
    
            <p>According to the number of seconds, latitude and longitude, which country is likely to have reported seeing a UFO?</p>
    
            <form action="{{ url_for('predict')}}" method="post">
              <input type="number" name="seconds" placeholder="Seconds" required="required" min="0" max="60" />
              <input type="text" name="latitude" placeholder="Latitude" required="required" />
              <input type="text" name="longitude" placeholder="Longitude" required="required" />
              <button type="submit" class="btn">Predict country where the UFO is seen</button>
            </form>
    
            <p>{{ prediction_text }}</p>
    
          </div>
    
        </div>
    
      </body>
    </html>
    

    Bu dosyadaki şablonlamaya bir göz atın. Uygulama tarafından sağlanacak değişkenlerin etrafındaki 'bıyık' sözdizimine dikkat edin, örneğin tahmin metni: {{}}. Ayrıca, /predict rotasına bir tahmin gönderen bir form da var.

    Son olarak, modeli tüketen ve tahminlerin görüntülenmesini sağlayan Python dosyasını oluşturabilirsiniz:

  9. app.py dosyasına şunları ekleyin:

    import numpy as np
    from flask import Flask, request, render_template
    import pickle
    
    app = Flask(__name__)
    
    model = pickle.load(open("./ufo-model.pkl", "rb"))
    
    
    @app.route("/")
    def home():
        return render_template("index.html")
    
    
    @app.route("/predict", methods=["POST"])
    def predict():
    
        int_features = [int(x) for x in request.form.values()]
        final_features = [np.array(int_features)]
        prediction = model.predict(final_features)
    
        output = prediction[0]
    
        countries = ["Australia", "Canada", "Germany", "UK", "US"]
    
        return render_template(
            "index.html", prediction_text="Likely country: {}".format(countries[output])
        )
    
    
    if __name__ == "__main__":
        app.run(debug=True)
    

    💡 İpucu: Flask kullanarak web uygulamasını çalıştırırken debug=True eklediğinizde, uygulamanızda yaptığınız değişiklikler sunucuyu yeniden başlatmaya gerek kalmadan hemen yansıtılır. Dikkat! Bu modu bir üretim uygulamasında etkinleştirmeyin.

python app.py veya python3 app.py çalıştırırsanız - yerel olarak web sunucunuz başlar ve UFO'ların nerede görüldüğüne dair merak ettiğiniz soruya cevap almak için kısa bir form doldurabilirsiniz!

Bunu yapmadan önce, app.py dosyasının bölümlerine bir göz atın:

  1. İlk olarak, bağımlılıklar yüklenir ve uygulama başlar.
  2. Daha sonra, model içe aktarılır.
  3. Ardından, ana rotada index.html işlenir.

/predict rotasında, form gönderildiğinde birkaç şey olur:

  1. Form değişkenleri toplanır ve bir numpy dizisine dönüştürülür. Daha sonra modele gönderilir ve bir tahmin döndürülür.
  2. Görüntülenmesini istediğimiz ülkeler, tahmin edilen ülke kodundan okunabilir metin olarak yeniden işlenir ve bu değer index.html'e şablonda işlenmek üzere geri gönderilir.

Bir modeli bu şekilde, Flask ve picklelanmış bir model ile kullanmak oldukça basittir. En zor şey, modele bir tahmin almak için gönderilmesi gereken verilerin şeklini anlamaktır. Bu tamamen modelin nasıl eğitildiğine bağlıdır. Bu model, bir tahmin almak için üç veri noktası girişi gerektirir.

Profesyonel bir ortamda, modeli eğiten kişiler ile bunu bir web veya mobil uygulamada tüketen kişiler arasında iyi iletişimin ne kadar önemli olduğunu görebilirsiniz. Bizim durumumuzda, bu sadece bir kişi, yani sizsiniz!


🚀 Zorluk

Bir defterde çalışmak ve modeli Flask uygulamasına aktarmak yerine, modeli doğrudan Flask uygulamasında eğitebilirsiniz! Python kodunuzu defterdeki veriler temizlendikten sonra uygulama içinde bir train rotasında modeli eğitmek için dönüştürmeyi deneyin. Bu yöntemi takip etmenin artıları ve eksileri nelerdir?

Ders Sonrası Test

İnceleme ve Kendi Kendine Çalışma

ML modellerini tüketmek için bir web uygulaması oluşturmanın birçok yolu vardır. Makine öğrenimini kullanmak için JavaScript veya Python ile bir web uygulaması oluşturmanın yollarını listeleyin. Mimarileri düşünün: Model uygulamada mı kalmalı yoksa bulutta mı barındırılmalı? Eğer bulutta barındırılacaksa, ona nasıl erişirsiniz? Uygulamalı bir ML web çözümü için bir mimari model çizin.

Ödev

Farklı bir model deneyin


Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.