Zephyrnet Logosu

ClearML Kullanarak MNIST Basamak Sınıflandırma Eğitimi

Tarih:

ClearML | MNİST

Giriş

Bir Veri Bilimcisi veya MLOps Mühendisiyseniz, bir noktada, diğer üyelerle işbirliği yaparken aynı görevin farklı sürümleri için kodu, verileri ve modelleri izleme sorunlarıyla karşı karşıya kalırsınız. MLOps etrafında dönen karmaşıklığı azaltmak için uçtan uca bir MLOps platformu olan ClearML bu amaçlar için kullanılabilir, kolay kod geliştirmeyi kolaylaştırır, makine öğrenimi iş akışını düzenler ve makine öğrenimi modellerini üretime dağıtmayı otomatikleştirir. Bu platform, tekrarlanabilir ve ölçeklenebilir hale getirerek iş akışı yükünü azaltır. ClearML Kullanarak MNIST Rakam Sınıflandırması hakkındaki eğitimle başlayalım.

Öğrenme hedefleri

Bu makale ile aşağıdakileri öğreneceksiniz:

  1. ClearML'nin Temel Özellikleri
  2. ClearML'nin nasıl kurulacağına ilişkin adım adım eğitim
  3. Adım adım eğitim MNIST rakam sınıflandırması ClearML kullanarak
  4. ClearML ve jupyter notebook kullanılarak gerçekleştirilebilen görevler

Bu makale, Veri Bilimi Blogatonu.

İçindekiler

Ana Özellikler

  • orkestrasyon: Kolay düzenleme için mevcut altyapımızda kod, veri ve ortamın sağlanmasına yardımcı olur.
  • PLC: ClearML, otomatik ölçeklendirme iş akışı özelliğiyle makine öğreniminin üretime gönderilmesini kolaylaştırır. Ayrıca, herhangi bir iş akışını yerel olarak veya bulut platformunda başlatma yeteneğine de sahiptir.
  • Deney Yönetimi: Tüm deneylerinizi tek bir noktada izlemenizi, düzenlemenizi ve karşılaştırmanızı sağlar. Bu, bilinçli kararlar vermek için hiperparametreleri, kod sürümlerini ve deney bulgularını kolayca izlemenize olanak tanır.
  • Model Yönetimi: Makine öğrenimi modellerinizi kolayca kaydetmenize, sürümlendirmenize ve dağıtmanıza olanak tanır. Modellerinizi paketlemek, ekip üyelerinizle işbirliği yapmak ve modellerinizi üretime dağıtmak için kullanabilirsiniz.
  • Otomatik Günlüğe Kaydetme: Metrikler, grafikler ve çıktı dosyaları dahil tüm deney sonuçlarınızı otomatik olarak günlüğe kaydeder. Sonuçlarınızı kolayca bir panoda görselleştirebilir, başkalarıyla paylaşabilir ve önceki deneylerle karşılaştırabilirsiniz.
  • Dağıtılmış Eğitim: Birkaç makine veya GPU üzerinden dağıtılmış eğitime izin verir. Denemelerinizi ölçeklendirmenize ve eğitim sürenizi kolayca kısaltmanıza olanak tanır.
  • Entegrasyon: TensorFlow, PyTorch ve scikit-learn dahil olmak üzere çeşitli önde gelen makine öğrenimi çerçeveleriyle entegre olur. Ayrıca Jupyter not defterleri ve Git gibi diğer araçlarla arabirim oluşturur.
  • İşbirliği: Ekip üyeleriyle kolayca işbirliği yapmanıza, deneyleri ve modelleri paylaşmanıza ve projelerinizin durumunu takip etmenize olanak tanır. Size rol tabanlı erişim denetimi, işbirliğine dayalı araçlar ve otomatikleştirilmiş bildirimler sağlar.
  • Bulut Dağıtımı: Modellerinizi AWS, Azure ve GCP gibi popüler bulut platformlarına dağıtmayı destekler. Ayrıca Kubernetes ve Docker gibi popüler dağıtım araçlarıyla önceden oluşturulmuş entegrasyonlar sağlar.

MNIST Sınıflandırma Görevi Üzerine ClearML Eğitimi

ClearML platformunda bulunan çeşitli özellikleri anlamanıza yardımcı olmak için ClearML'yi kullanarak MNIST basamak sınıflandırması hakkında adım adım bir öğreticiyi inceleyeceğiz. İleri yayılım ve geri yayılımı kullanarak özellikleri öğrenmek için sinir ağını eğiteceğiz. Sinir ağından nihai çıktı, her el yazısı rakam görüntüsü için bir tane olmak üzere 10 puanlık bir vektör olacaktır. Modelimizin test setindeki görüntüleri sınıflandırma yeteneğini de değerlendireceğiz. İlk olarak, kaydolmanız gerekir ClearML platformu. ClearML platformuna ücretsiz olarak kaydolabilirsiniz.

Montaj

ClearML python paketini şu adresten yükleyebilirsiniz: PyPI Aşağıdaki komutu kullanarak depo:

pip install clearml

Bu eğitimde, kullanacağız Jüpiter geliştirme amaçlı not defteri. ClearML web tarayıcısında, ClearML SDK'yı sunucuya bağlamak için kimlik bilgileri oluşturuyoruz. ClearML Web Kullanıcı Arayüzünü bir tarayıcıda açın. AYARLAR > ÇALIŞMA ALANI sayfasında, Yeni kimlik bilgileri oluştur'a tıklayın. JUPYTER NOTEBOOK sekmesi, not defterinizi yapılandırmak için gereken komutları gösterir (fareyle üzerine gelindiğinde panoya kopyalama işlemi mevcuttur). Bu komutları not defterinize ekleyin ve hazırız!

MNİST

ClearML Kullanarak MNIST Sınıflandırması

Bu eğitim için yeni bir python sanal ortamı oluşturabilirsiniz. Kodu genel GitHub depomdan da indirebilirsiniz. okuyun aşağıdaki komutu kullanarak ve ardından gerekli bağımlılık paketlerini kurarak:

git clone https://github.com/dheerajnbhat/clearml-mnist-tf.git
cd clearml-mnist-tf
pip install -r requirements.txt

Klonlamadan sonra klasöre gidin ve Jupyter not defterini açın. Ardından, kimlik bilgilerini değiştirin CLEARML_API_ACCESS_KEY ve CLEARML_API_SECRET_KEY ilk hücrede yukarıda oluşturduğunuz kimlik bilgilerine gidin ve kod hücrelerinin geri kalanını değiştirmeden çalıştırın.

İlk olarak, jupyter not defterine kimlik bilgilerini ekliyoruz

%env CLEARML_WEB_HOST=https://app.clear.ml
%env CLEARML_API_HOST=https://api.clear.ml
%env CLEARML_FILES_HOST=https://files.clear.ml
# Jupyter
%env CLEARML_API_ACCESS_KEY='YOUR_CLEARML_API_ACCESS_KEY'
%env CLEARML_API_SECRET_KEY='YOUR_CLEARML_API_SECRET_KEY'

Daha sonra görevi çalıştırmak için gerekli paketleri içe aktarırız:

import os
import tempfile
import numpy as np
import matplotlib.pyplot as plt from clearml import Task
from tensorflow.keras.callbacks import ModelCheckpoint, TensorBoard
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Activation, Dense
from tensorflow.keras.models import Sequential

Şimdi jupyter not defterimizi aşağıdaki kodu kullanarak ClearML'ye bağlıyoruz:

task = Task.init( project_name='mnist_digit_classification', task_name='dev_experiment'
)

Modeli eğitmek için kullanacağımız parametreleri, ClearML'nin izleyeceği bir sözlük olarak başlatıyoruz:

# Set script parameters
task_params = { 'batch_size': 64, 'nb_classes': 10, 'nb_epoch': 6, 'hidden_dim': 512,
}
task_params = task.connect(task_params)

ClearML, kodun herhangi bir yerinde değiştirilen betikteki değişiklikleri izleyebilir. Bu özelliği sergilemek için şimdi parti boyutunu 64'ten 128'e değiştirelim ve değişkene birkaç anahtar/değer çifti daha ekleyelim. görev_paramları:

# You can notice that, updating the task_params is traced and updated in ClearML UI
task_params['batch_size'] = 128
task_params['model_loss'] = 'categorical_crossentropy'
task_params['model_optimizer'] = 'rmsprop'

Şimdi MNIST veri setimizi bir sözlüğe yüklüyoruz:

raw_data_dir = os.getcwd() + '/'
data_sources = { "training_images": "train-images-idx3-ubyte.gz", # 60,000 training images. "test_images": "t10k-images-idx3-ubyte.gz", # 10,000 test images. "training_labels": "train-labels-idx1-ubyte.gz", # 60,000 training labels. "test_labels": "t10k-labels-idx1-ubyte.gz", # 10,000 test labels.
}#import csv

4 dosyayı açar ve 4 oluştururuz darraylar, onları bir sözlüğe kaydediyor. Her orijinal görüntü 28×28 boyutundadır ve sinir ağları normalde bir 1D vektör girişi bekler; bu nedenle görselleri de 28×28 (784) çarparak yeniden şekillendirmemiz gerekiyor.

mnist_dataset = {} # Images
for key in ("training_images", "test_images"): with gzip.open(os.path.join(raw_data_dir, data_sources[key]), "rb") as mnist_file: mnist_dataset[key] = np.frombuffer( mnist_file.read(), np.uint8, offset=16 ).reshape(-1, 28 * 28)
# Labels
for key in ("training_labels", "test_labels"): with gzip.open(os.path.join(raw_data_dir, data_sources[key]), "rb") as mnist_file: mnist_dataset[key] = np.frombuffer(mnist_file.read(), np.uint8, offset=8)

Şimdi, veriler için "x" ve etiketler için "y" standart gösterimini kullanarak verileri eğitim ve test kümesine ayırıyoruz:

x_train, y_train, x_test, y_test = ( mnist_dataset["training_images"], mnist_dataset["training_labels"], mnist_dataset["test_images"], mnist_dataset["test_labels"],
)

Kullanarak çizerek eğitim verilerinden örnek bir görüntüyü kontrol edelim. matplotlib kütüphane

mnist_image = x_train[59999, :].reshape(28, 28)
plt.imshow(mnist_image)
# Display the image.
plt.show()

Şimdi, veri tipini “float32” ye çevirerek ve görüntü örneklerini normalleştirerek verileri işliyoruz:

X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 255.
X_test /= 255.
print(X_train.shape[0], 'train samples')
print(X_test.shape[0], 'test samples')

60000 eğitim örneği ve 10000 test örneği olduğunu görebiliriz. Ayrıca etiketleri, her sınıfın bir basamağa karşılık geldiği 10 sınıfın olduğu bir sıcak kodlanmış vektöre dönüştürmemiz gerekir:

y_train = np_utils.to_categorical(y_train, task_params['nb_classes'])
y_test = np_utils.to_categorical(y_test, task_params['nb_classes'])

Şimdi, eğitim için keras kullanarak bir model oluşturuyoruz:

model = Sequential()
model.add(Dense(task_params['hidden_dim'], input_shape=(784,)))
model.add(Activation('relu'))
# model.add(Dropout(0.2))
model.add(Dense(task_params['hidden_dim']))
model.add(Activation('relu'))
# model.add(Dropout(0.2))
model.add(Dense(10))
model.add(Activation('softmax')) model.summary()

ReLU aktivasyonuna sahip, 512 birim gizli katmandan oluşan iki Yoğun katmana sahip Sıralı bir modeldir. Son katman, 10 sınıfın olasılığını tahmin etmek için softmax aktivasyonuna sahip 10 çıkış birimine sahip bir Yoğun katmandır. Modeli başlattıktan sonra, daha önce oluşturulan eğitim örneklerini kullanarak modeli eğitiyoruz. Her eğitim döneminden sonra model ağırlıklarını depolamak için ModelCheckpoint sınıfını ve farklı ölçümleri izlemek için TensorBoard'u kullanıyoruz. Bu geri aramalar, eğitim tamamlandıktan sonra web kullanıcı arabiriminde görselleştirilebilen ClearML tarafından izlenir.

model.compile(loss=task_params['model_loss'], optimizer=task_params['model_optimizer'], metrics=['accuracy']) board = TensorBoard( histogram_freq=1, log_dir=os.path.join( tempfile.gettempdir(), 'histogram_example' )
)
model_store = ModelCheckpoint( filepath=os.path.join( tempfile.gettempdir(), 'weight.{epoch}.hdf5' )
) model.fit( x_train, y_train, batch_size=task_params['batch_size'], epochs=task_params['nb_epoch'], callbacks=[board, model_store], verbose=1, validation_data=(x_test, y_test)
)

Modeli başarılı bir şekilde eğittikten sonra, doğruluğunu test etmemiz gerekir. Eğitilmiş modelin kaybını ve doğruluğunu elde etmek için test verilerini ve etiketleri kullanırız.

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Dizüstü bilgisayar hücrelerini tamamen çalıştırdıktan sonra modeli başarıyla eğittik ve test ettik. Bir Veri Bilimcisi olarak, aynı görev üzerinde farklı modeller ve hiperparametreler eğiterek birden fazla deney yürütürsünüz. ClearML'nin çalıştırdığımız her deney için çok fazla not defteri veya komut dosyası tutma yükünü azalttığı yer burasıdır. Aynı görev üzerinde yeni bir deney çalıştırırken, aynı proje için deney adını değiştirebilirsiniz, böylece deney aşağıda gösterildiği gibi aynı proje altında ClearML'de oturum açmış olur:

task = Task.init( project_name='mnist_digit_classification', task_name='dev_experiment_1'
)

ClearML Kullanıcı Arayüzü Görselleştirme

Kullanıcı Paneli

Pano sayfası, erişebileceğiniz tüm projeleri ve ClearML'yi kullanmaya başlamanız için bazı örnekleri gösterir.

MNİST

Projeler

Bu görevde yürüttüğümüz tüm deneyleri gösteren bu öğreticide (Proje adı: mnist_digit_classification) yürüttüğünüz projeye gidebilirsiniz.

Deneyler

Deneylerden herhangi birine sağ tıklayarak deneylerin tüm detaylarını görüntüleyebilir ve tüm deney detaylarının olduğu farklı sekmeleri görüntüleyebilirsiniz.

MNİST

Proje yürütme sekmesi, kurulu tüm paketler, kapsayıcı ayrıntıları (varsa), taahhüt edilmemiş değişiklikler vb. gibi ayrıntıları gösterir.

Proje konfigürasyon sekmesi, eklediğimiz tüm konfigürasyonları ve deneyleri çalıştırırken kullanılan varsayılan konfigürasyonları gösterir.

Proje yapıtları sekmesi, deneylerde çalıştırılan her çağ için tüm model mimarisini ve yapılandırma ayrıntılarını gösterir.

Proje ölçekleri sekmesi, her eğitim dönemindeki doğruluk ve kayıp gibi eğitim ve doğrulama verileri için tüm grafikleri gösterir.

Bu eğitimin amacı, ClearML platformuyla başlamanıza yardımcı olmak ve ClearML'nin sağlam bir geliştirme geliştirmek için sunabileceği özellikler ve yetenekler hakkında temel bir anlayış sağlamaktır. Geliştirme aşamasından sonra, üretim iş akışını devreye almak ve otomatikleştirmek için ClearML'yi de kullanabilirsiniz.

Jupyter Notebook'u ClearML ile Birleştirme

Jupyter not defteri ile ClearML kombinasyonu ile aşağıdakileri yapabilirsiniz:

  • Otomatik Günlüğe Kaydetme: Not defterlerini deneyler için kullandığımız için defterler dağınık hale gelebilir ve deneyleri yeniden yapmak acı verici olabilir. ClearML, zamandan tasarruf etmek ve kodu yeniden üretilebilir hale getirmek için yürütülen tüm kodu bir günlük dosyasında tutan bir otomatik günlük kaydı özelliğine sahiptir. Ayrıca, kolay yeniden üretilebilirlik için not defterinin bir .py dosyasını da tutar.
  • Sürüm oluşturma: Bu öğreticide daha önce gösterildiği gibi, yürüttüğümüz görev için deneylerimizi sürümlendirebilir ve ClearML kullanılarak yürütülen deneylerin tüm ayrıntılarını kolayca görüntüleyebiliriz.
  • Hiperparametre Optimizasyonu: ClearML hiperparametre optimizasyon özelliği, farklı deneylerden en iyi makine öğrenimi modelini seçme sürecini otomatikleştirmemize olanak tanır.
  • Canlı İzleme: ClearML aracısı, modelin konuşlandırılmasına ve modelin performansının ClearML panosunu kullanarak canlı olarak izlenmesine yardımcı olur.
  • Takım İşbirliği: Sorunsuz operasyonlar sağlamak için Rol Tabanlı Erişim ile kodunuzu, verilerinizi ve deneylerinizi paylaşmak için ekip üyelerinizle işbirliği yapmanıza yardımcı olur.

Sonuç

ClearML ayrıca aşağıdakiler gibi çerçeveleri de destekler: PyTorch, TensorFlow, scikit-öğrenme, XGBoost, Optuna, vb. ile en yeni teknoloji yığınlarıyla sorunsuz bir şekilde entegre edin. Kısaca özetlemek gerekirse ClearML, ML iş akışınızın geliştirme aşamasından üretimine kadar size yardımcı olacak birçok özelliğe sahiptir. Bu eğitimde kullanılan kod için GitHub depoma göz atabilirsiniz. okuyun. Bu makaleden önemli çıkarımlar şunlardır:

  • ClearML'nin üretim düzeyinde MLOps gerçekleştirmek için nasıl yetenekler sunduğunu anlamak
  • ClearML'yi yükleme ve kullanma adımları
  • Jüpyter not defterini kullanarak MNIST sınıflandırma görevinde ClearML kullanarak gözden geçirmeli eğitim
  • MNIST deneyinin tüm ayrıntılarını sergilemek için ClearML kullanıcı arabiriminin gözden geçirilmesi
  • ClearML ve jupyter notebook kullanılarak gerçekleştirilebilen görevler

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

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?