TensorFlow 2.0 alpha artık yayımlandı. Çerçeve, derin öğrenme topluluğu üzerinde önemli bir etkiye sahip. Uygulayıcılar, araştırmacılar, geliştiriciler bu çerçeveyi sevdi ve hiç olmadığı kadar benimsedi. Bugün gördüğümüz süper havalı, derin öğrenme destekli uygulamaların ivme kazanmasının başlıca nedenlerinden biri olduğu rahatlıkla söylenebilir. Bununla birlikte, TensorFlow 1.x’in de (diğer birçok çerçeve gibi) eksileri vardı. Martin Wicke’nin (TensorFlow ekibinden Yazılım Mühendisi) TF Dev Summit '19’da söylediği gibi -
1.0’dan bu yana çok şey öğrendik.
Geniş kullanıcı tabanından, GitHub konularından edinilen tüm derslerle TensorFlow ekibi, performans, kullanıcı deneyimi vb. iyileştirmeleri için önemli sayıda değişiklik içeren TensorFlow 2.0 alpha sürümünü yayımladı. Hızlı prototipleme olanağı sağlar ve birçok modern derin öğrenme pratiğini içerir. Bu yazıda bu değişikliklerin bir kısmını doğrudan uygulamalarla inceleyeceksiniz.
Not: Burada ele alınan güncellemeler, yazara göre en önemli olanlardır. Yazıyı takip edebilmek için daha önce bir miktar TensorFlow ve Keras deneyimine sahip olmanız gerekir. Aşağıda, TensorFlow ve Keras konularında tazeleme arıyorsanız işinize yarayabilecek bazı kaynaklar yer alıyor:
TensorFlow 2.0’a güncelleme yapmak için Jupyter Notebook’ta aşağıdaki satırı çalıştırmanız yeterli:
!pip install tensorflow==2.0.0-alpha0
GPU varyantı da aynı şekilde kurulabilir (öncesinde CUDA gerektirir):
!pip install tensorflow-gpu==2.0.0-alpha0
Kurulum süreci hakkında daha fazlasını buradan bulabilirsiniz.
İnceleyeceğiniz bazı güncellemeler, kod uygulamalarını içerir. Bu durumlarda bir veri kümesine ihtiyacınız olacak. Bu yazıda UCI Arşivi’ndeki Adult veri kümesini kullanacaksınız.
import pandas as pd
columns =["Age","WorkClass","fnlwgt","Education","EducationNum","MaritalStatus","Occupation","Relationship","Race","Gender","CapitalGain","CapitalLoss","HoursPerWeek","NativeCountry","Income"]
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data',
header=None,
names=columns)
data.head()Altyapı:
Age
WorkClass
fnlwgt
Education
EducationNum
MaritalStatus
Occupation
Relationship
Race
Gender
CapitalGain
CapitalLoss
HoursPerWeek
NativeCountry
Income
0
39
State-gov
77516
Bachelors
13
Never-married
Adm-clerical
Not-in-family
White
Male
2174
0
40
United-States
<=50K
1
50
Self-emp-not-inc
83311
Bachelors
13
Married-civ-spouse
Exec-managerial
Husband
White
Male
0
0
13
United-States
<=50K
2
38
Private
215646
HS-grad
9
Divorced
Handlers-cleaners
Not-in-family
White
Male
0
0
40
United-States
<=50K
3
53
Private
234721
11th
7
Married-civ-spouse
Handlers-cleaners
Husband
Black
Male
0
0
40
United-States
<=50K
4
28
Private
338409
Bachelors
13
Married-civ-spouse
Prof-specialty
Wife
Black
Female
0
0
40
Cuba
<=50K
Bu veri kümesi, bir dizi kişisel bilgi verilerek bir kişinin yılda 50.000 $’dan fazla kazanıp kazanmayacağını tahmin etmeyi amaçlayan ikili bir sınıflandırma görevini temsil eder.
Biraz temel veri önişleme yapalım ve ardından veriyi 80:20 oranında ayıralım:
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
import numpy as np
# Label Encode
le = LabelEncoder()
data = data.apply(le.fit_transform)# Segregate data features & convert into NumPy arrays
X = data.iloc[:,0:-1].values
y = data['Income'].values
# Split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7)Altyapı:
Şu ana kadar, TensorFlow 2.0 kurulu çalışan bir ortamınız ve çalışma alanınıza yüklenmiş bir veri kümeniz olmalı. Artık güncellemelere geçebilirsiniz.
1. Varsayılan olarak Eager Execution
TensorFlow 2.0’da artık bir oturum oluşturup hesaplama grafiğini onun içinde çalıştırmanız gerekmiyor. Eager execution 2.0 sürümünde varsayılan olarak etkindir; böylece modellerinizi kurup anında çalıştırabilirsiniz. İsterseniz eager execution’ı şu şekilde devre dışı bırakabilirsiniz:
tf.compat.v1.disable_eager_execution() (tensorflow’un tf takma adıyla içe aktarıldığı varsayılır.)
Bu farkı gösteren küçük bir kod karşılaştırması şöyle -
2. tf.function ve AutoGraph
Eager execution size imperatif programlama olanağı sağlarken, dağıtık eğitim, tam ölçekli optimizasyon, üretim ortamları söz konusu olduğunda TensorFlow 1.x tarzı grafik yürütmenin eager execution’a göre avantajları vardır. TensorFlow 2.0’da grafik tabanlı yürütmeleri daha esnek bir şekilde korursunuz. Bu, tf.function ve AutoGraph ile sağlanır.
tf.function, AutoGraph özelliği sayesinde Python tarzı sözdizimiyle TensorFlow grafikleri tanımlamanızı sağlar. AutoGraph, if deyimi, for döngüsü, while döngüsü, Iterator’lar vb. dahil olmak üzere geniş bir Python uyumluluğu sunar. Ancak sınırlamalar da vardır. Mevcut desteklerin tam listesini burada bulabilirsiniz. Aşağıda yalnızca bir decorator ile bir TensorFlow grafiğinin ne kadar kolay tanımlanabileceğini gösteren bir örnek yer alıyor.
import tensorflow as tf
# Define the forward pass@tf.functiondefsingle_layer(x, y):return tf.nn.relu(tf.matmul(x, y))# Generate random data drawn from a uniform distribution
x = tf.random.uniform((2,3))
y = tf.random.uniform((3,5))
single_layer(x, y)Altyapı:
single_layer() işlevini çalıştırmak için herhangi bir oturum veya placeholder oluşturmanız gerekmediğine dikkat edin. Bu, tf.function’ın kullanışlı özelliklerinden biridir. Arka planda, kodunuzun daha hızlı çalışması için gerekli tüm iyileştirmeleri yapar.
3. tf.variable_scope artık gerekmiyor
TensorFlow 1.x’te, tf.layers’ı değişken olarak kullanmak ve yeniden kullanmak için tf.variable bloğunu kullanmanız gerekirdi. Ancak TensorFlow 2.0’da bu artık gerekli değil. TensorFlow 2.0’da merkezde yüksek seviyeli API olarak keras bulunduğundan, tf.layers kullanılarak oluşturulan tüm katmanlar kolayca bir tf.keras.Sequential tanımına yerleştirilebilir. Bu, kodu çok daha okunur kılar ve değişkenleri ve kayıpları da takip edebilirsiniz.
İşte bir örnek:
# Define the model
model = tf.keras.Sequential([
tf.keras.layers.Dropout(rate=0.2, input_shape=X_train.shape[1:]),
tf.keras.layers.Dense(units=64, activation='relu'),
tf.keras.layers.Dropout(rate=0.2),
tf.keras.layers.Dense(units=64, activation='relu'),
tf.keras.layers.Dropout(rate=0.2),
tf.keras.layers.Dense(units=1, activation='sigmoid')])# Get the output probabilities
out_probs = model(X_train.astype(np.float32), training=True)print(out_probs)Altyapı:
Yukarıdaki örnekte, ham çıktı olasılıklarını almak için model üzerinden eğitim verilerini geçirdiniz. Bu yalnızca bir ileri beslemedir. Elbette modelinizi eğitmeye devam edebilirsiniz -
Makine öğrenmesi araştırmalarında veya endüstriyel uygulamalarda, belirli kullanım senaryolarına uygun özel katmanlar yazma ihtiyacı sıkça doğar. TensorFlow 2.0, özel bir katman yazmayı ve mevcut katmanlarla birlikte kullanmayı son derece kolaylaştırır. Modelinizin ileri beslemesini de istediğiniz şekilde özelleştirebilirsiniz.
Özel bir katman oluşturmak için en kolay seçenek, tf.keras.layers içindeki Layer sınıfını genişletmek ve buna göre tanımlamaktır. Bir özel katman oluşturacak ve ardından ileri hesaplamalarını tanımlayacaksınız. Aşağıda help(tf.keras.layers.Layer) çalıştırıldığında alınan çıktı bulunuyor. Bu işi yapmak için neleri belirtmeniz gerektiğini gösterir:
Kurucuyu, çıktı sayısını alacak şekilde tanımlayın
build() yönteminde katmanınız için ağırlıkları ekleyin
Son olarak call() yönteminde matris çarpımı ve relu()’yu zincirleyerek ileri beslemeyi tanımlayın
classMyDenseLayer(tf.keras.layers.Layer):# Define the constructordef__init__(self, num_outputs):super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
# Define the build function to add the weightsdefbuild(self, input_shape):
self.kernel = self.add_variable("kernel",
shape=[input_shape[-1],
self.num_outputs])# Define the forward passdefcall(self,input):
matmul = tf.matmul(input, self.kernel)return tf.nn.relu(matmul)# Initialize the layer with 10 output units
layer = MyDenseLayer(10)# Supply the input shape
layer(tf.random.uniform((10,3)))# Display the trainable parameters of the layerprint(layer.trainable_variables)Altyapı:
tf.keras içindeki Model sınıfını genişleterek birden çok katmanı bir araya getirebilirsiniz. Modelleri birleştirme hakkında daha fazlasını burada bulabilirsiniz.
5. Model Eğitiminde Esneklik
TensorFlow, kayıp fonksiyonunun gradyanlarını model parametrelerine göre hesaplamak için otomatik türev alma kullanabilir. tf.GradientTape, bir bağlam içinde bir kaset oluşturur ve TensorFlow bu kasete kaydedilen her hesaplamadan gradyanları takip etmek için bunu kullanır. Bunu anlamak için tf.keras.Model sınıfını genişleterek daha düşük seviyeli bir şekilde bir model tanımlayalım.
from tensorflow.keras import Model
classCustomModel(Model):def__init__(self):super(CustomModel, self).__init__()
self.do1 = tf.keras.layers.Dropout(rate=0.2, input_shape=(14,))
self.fc1 = tf.keras.layers.Dense(units=64, activation='relu')
self.do2 = tf.keras.layers.Dropout(rate=0.2)
self.fc2 = tf.keras.layers.Dense(units=64, activation='relu')
self.do3 = tf.keras.layers.Dropout(rate=0.2)
self.out = tf.keras.layers.Dense(units=1, activation='sigmoid')defcall(self, x):
x = self.do1(x)
x = self.fc1(x)
x = self.do2(x)
x = self.fc2(x)
x = self.do3(x)return self.out(x)
model = CustomModel()Altyapı:
Bu modelin topolojisinin, daha önce tanımladığınız modelle bire bir aynı olduğuna dikkat edin. Bu modeli otomatik türev alma ile eğitebilmek için kayıp fonksiyonunu ve optimize ediciyi farklı şekilde tanımlamanız gerekir -
Şimdi, ağın eğitiminde performansı ölçmek için kullanılacak metrikleri tanımlayacaksınız. Performanstan kasıt, burada modelin kaybı ve doğruluğudur.
# Average the loss across the batch size within an epoch
train_loss = tf.keras.metrics.Mean(name='train_loss')
train_acc = tf.keras.metrics.BinaryAccuracy(name='train_acc')
valid_loss = tf.keras.metrics.Mean(name='test_loss')
valid_acc = tf.keras.metrics.BinaryAccuracy(name='valid_acc')Altyapı:
tf.data, girdi veri hatlarını tanımlamak için yardımcı yöntemler sağlar. Bu, özellikle büyük hacimli verilerle uğraşırken çok kullanışlıdır.
Şimdi, modelin eğitimi sırasında veri kümeleri üretecek veri üreticisini tanımlayacaksınız.
Artık modeli tf.GradientTape kullanarak eğitmeye hazırsınız. Öncelikle, tf.data.DataSet kullanarak az önce tanımladığınız verilerle modeli eğitecek bir yöntem tanımlayacaksınız. Hesaplamada sunduğu hız avantajından yararlanmak için model eğitim adımlarını tf.function decorator’ü ile de sarmalayacaksınız.
Model eğitimi ve doğrulama
# Train the model@tf.functiondefmodel_train(features, labels):# Define the GradientTape contextwith tf.GradientTape()as tape:# Get the probabilities
predictions = model(features)# Calculate the loss
loss = loss_func(labels, predictions)# Get the gradients
gradients = tape.gradient(loss, model.trainable_variables)# Update the weights
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
train_acc(labels, predictions)Altyapı:
Bu örnek, TensorFlow 2.0 yazarlarının bu örneğinden esinlenilmiştir.
6. TensorFlow Datasets
Ağ modeliyle şık bir şekilde çalışmak için DataSets adlı ayrı bir modül kullanılır. Bunu önceki örnekte zaten gördünüz. Bu bölümde, MNIST veri kümesini tam istediğiniz şekilde nasıl yükleyebileceğinizi göreceksiniz.
tensorflow_datasets kütüphanesini pip ile kurabilirsiniz. Kurulum tamamlandıktan sonra hazırsınız. Veri kümesi kurulum hattınızı esnek şekilde hazırlamanıza yardımcı olan çeşitli yardımcı işlevler sağlar. Bu işlevler hakkında daha fazlasını buradan ve buradan öğrenebilirsiniz. Şimdi MNIST veri kümesini yüklemek için bir veri giriş hattının nasıl kurulacağını göreceksiniz.
import tensorflow_datasets as tfds
# You can fetch the DatasetBuilder class by string
mnist_builder = tfds.builder("mnist")# Download the dataset
mnist_builder.download_and_prepare()# Construct a tf.data.Dataset: train and test
ds_train, ds_test = mnist_builder.as_dataset(split=[tfds.Split.TRAIN, tfds.Split.TEST])Altyapı:
Uyarıyı yok sayabilirsiniz. tensorflow_datasets’in veri hattını ne kadar zarif bir şekilde ele aldığına dikkat edin.
# Prepare batches of 128 from the training set
ds_train = ds_train.batch(128)# Load in the dataset in the simplest way possiblefor features in ds_train:
image, label = features["image"], features["label"]Altyapı:
Şimdi yüklediğiniz görüntü koleksiyonundan ilk görüntüyü gösterebilirsiniz. Not: tensorflow_datasets, eager modda da grafik tabanlı ayarda da çalışır.
import matplotlib.pyplot as plt
%matplotlib inline
# You can convert a TensorFlow tensor just by using# .numpy()
plt.imshow(image[0].numpy().reshape(28,28), cmap=plt.cm.binary)
plt.show()Altyapı:
7. Otomatik Karma Hassasiyet (Mixed Precision) Politikası
Karma hassasiyet politikası geçen yıl NVIDIA tarafından önerildi. Orijinal makaleyi burada bulabilirsiniz. Karma hassasiyetin temel fikri, yarım (FP16) ve tam (FP32) hassasiyetin bir karışımını kullanarak her iki dünyanın da avantajlarından yararlanmaktır. Çok derin sinir ağlarının eğitiminde (hem süre hem de skor açısından) etkileyici sonuçlar göstermiştir.
CUDA etkin bir GPU ortamında (ör. Volta Nesli, Tesla T4) ve TensorFlow 2.0’ın GPU varyantını kurduysanız, TensorFlow’a karma hassasiyette eğitim yapmasını şu şekilde söyleyebilirsiniz -
Bu, bir TensorFlow grafiğinin işlemlerini otomatik olarak uygun şekilde dönüştürür. Modelinizin performansında iyi bir artış görebilirsiniz. TensorFlow çekirdek işlemlerini de karma hassasiyet politikasıyla optimize edebilirsiniz. Daha fazlası için bu makaleye göz atın.
TensorFlow 2.0, eğitim sürecini birden fazla GPU’ya dağıtmayı son derece kolaylaştırır. Bu, çok yüksek yükleri karşılamanız gereken üretim amaçları için özellikle kullanışlıdır. Yapmanız gereken, model eğitim bloğunuzu bir with bloğunun içine koymak kadar basittir.
Önce aşağıdaki gibi bir dağıtım stratejisi belirtirsiniz:
Yansıtılmış bir strateji, GPU başına bir kopya oluşturur ve model değişkenleri GPU’lar arasında eşit şekilde yansıtılır. Tanımladığınız stratejiyi artık şu şekilde kullanabilirsiniz:
with mirrored_strategy.scope():
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(1,))])
model.compile(loss='mse', optimizer='sgd')
model.fit(X_train, y_train,
validation_data=(X_test, y_test),
batch_size=128,
epochs=10)Altyapı:
Not: Yukarıdaki kod parçası yalnızca tek bir sistemde birden çok GPU yapılandırılmışsa faydalı olacaktır. Yapılandırabileceğiniz bir dizi dağıtım stratejisi vardır. Daha fazlasını burada bulabilirsiniz.
9. Jupyter Notebook İçinde TensorBoard
Muhtemelen bu güncellemenin en heyecan verici kısmı bu. Model eğitimini doğrudan Jupyter Notebook’unuzda TensorBoard aracılığıyla görselleştirebilirsiniz. Yeni TensorBoard, bellek profilleme, karışıklık matrisi dahil görüntü verilerini görüntüleme, kavramsal model grafiği vb. gibi birçok heyecan verici özellikle yüklü geliyor. Daha fazlasını burada bulabilirsiniz.
Bu bölümde, TensorBoard’un Jupyter Notebook içinde görüntülenmesi için ortamınızı yapılandıracaksınız. Önce tensorboard.notebook notebook uzantısını yüklemeniz gerekir -
Şimdi tf.keras.callbacks modülünü kullanarak TensorBoard geri çağırımını tanımlayacaksınız.
from datetime import datetime
import os
# Make a directory to keep the training logs
os.mkdir("logs")# Set the callback
logdir ="logs"
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=logdir)Altyapı:
Modeli tf.keras’ın Sequential API’sini kullanarak yeniden kurun -
# Define the model
model = tf.keras.Sequential([
tf.keras.layers.Dropout(rate=0.2, input_shape=X_train.shape[1:]),
tf.keras.layers.Dense(units=64, activation='relu'),
tf.keras.layers.Dropout(rate=0.2),
tf.keras.layers.Dense(units=64, activation='relu'),
tf.keras.layers.Dropout(rate=0.2),
tf.keras.layers.Dense(units=1, activation='sigmoid')])# Compile the model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])Altyapı:
Eğitim ve test kümeleri farklı kullanımlar için değiştirilmişti. Bu yüzden tekrar ayırmak iyi bir fikir olacaktır -
# The TensorBoard extension%tensorboard --logdir logs/# Pass the TensorBoard callback you defined
model.fit(X_train, y_train,
validation_data=(X_test, y_test),
batch_size=64,
epochs=10,
callbacks=[tensorboard_callback],
verbose=False)Altyapı:
<iframe
width="100%"
height="800"
src="http://localhost:6006"
frameborder="0"
allowfullscreen
></iframe><tensorflow.python.keras.callbacks.History at 0x7fc215b69400>Altyapı:
TensorBoard panosu Jupyter Notebook’unuzda yüklenmeli ve eğitim ile doğrulama metriklerini izleyebilmelisiniz.
10. Swift için TensorFlow
Tüm olağanüstü başarısına rağmen, Python hakkında üzücü olan bir şey onun yavaş olmasıdır. Araştırmacılara, uygulayıcılara ve hatta yeni başlayanlara yardımcı olmak için TensorFlow ekibi Swift için bir sürüm geliştirdi. Python varyantı kadar üretime hazır olmasa da kesinlikle potansiyele sahip. Swift, daha düşük seviyeli etkileşimlere ve gelişmiş derleme modüllerine olanak tanır. TensorFlow’un Swift varyantına ilişkin her şeyi burada bulabilirsiniz. Ayrıca Josh Gordon’ın yaptığı bu röportajı da görmeniz önerilir; burada Jeremy Howard bu yöndeki görüşlerini paylaşıyor.
Sırada Ne Var?
Bu yazının sonuna geldiniz. Derin öğrenmenin güzelliği uygulamadadır. Bir sonraki adımınız, bu yazıda tartışılan fikirleri denemek ve uygulamaya koymak olmalı. Bu TensorFlow güncellemesi, en kapsamlı ve geliştirici dostu güncellemelerden biri. Bu yılın TensorFlow Dev Summit’ine ait YouTube izleme listesini kontrol etmeniz önerilir; burada TensorFlow lattice, TensorFlow probability, TensorFlow lite ve daha fazlasına ilişkin ek güncellemeler bulacaksınız.
Derin öğrenme bilginizi güçlendirmekle ilgileniyorsanız aşağıdaki kurslara göz atabilirsiniz:
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
TensorFlow 2.0 alphaartık yayımlandı. Çerçeve, derin öğrenme topluluğu üzerinde önemli bir etkiye sahip. Uygulayıcılar, araştırmacılar, geliştiriciler bu çerçeveyi sevdi ve hiç olmadığı kadar benimsedi. Bugün gördüğümüz süper havalı, derin öğrenme destekli uygulamaların ivme kazanmasının başlıca nedenlerinden biri olduğu rahatlıkla söylenebilir. Bununla birlikte,TensorFlow 1.x’in de (diğer birçok çerçeve gibi) eksileri vardı. Martin Wicke’nin (TensorFlowekibinden Yazılım Mühendisi) TF Dev Summit '19’da söylediği gibi -Geniş kullanıcı tabanından, GitHub konularından edinilen tüm derslerle
TensorFlowekibi, performans, kullanıcı deneyimi vb. iyileştirmeleri için önemli sayıda değişiklik içerenTensorFlow 2.0 alphasürümünü yayımladı. Hızlı prototipleme olanağı sağlar ve birçok modern derin öğrenme pratiğini içerir. Bu yazıda bu değişikliklerin bir kısmını doğrudan uygulamalarla inceleyeceksiniz.Not: Burada ele alınan güncellemeler, yazara göre en önemli olanlardır. Yazıyı takip edebilmek için daha önce bir miktar
TensorFlowveKerasdeneyimine sahip olmanız gerekir. Aşağıda,TensorFlowveKeraskonularında tazeleme arıyorsanız işinize yarayabilecek bazı kaynaklar yer alıyor:Kurulum ve Örnek Bir Veri Kümesi
TensorFlow 2.0’a güncelleme yapmak için Jupyter Notebook’ta aşağıdaki satırı çalıştırmanız yeterli:!pip install tensorflow==2.0.0-alpha0GPU varyantı da aynı şekilde kurulabilir (öncesinde CUDA gerektirir):
!pip install tensorflow-gpu==2.0.0-alpha0Kurulum süreci hakkında daha fazlasını buradan bulabilirsiniz.
İnceleyeceğiniz bazı güncellemeler, kod uygulamalarını içerir. Bu durumlarda bir veri kümesine ihtiyacınız olacak. Bu yazıda UCI Arşivi’ndeki Adult veri kümesini kullanacaksınız.
Bu veri kümesi, bir dizi kişisel bilgi verilerek bir kişinin yılda 50.000 $’dan fazla kazanıp kazanmayacağını tahmin etmeyi amaçlayan ikili bir sınıflandırma görevini temsil eder.
Biraz temel veri önişleme yapalım ve ardından veriyi 80:20 oranında ayıralım:
Şu ana kadar,
TensorFlow 2.0kurulu çalışan bir ortamınız ve çalışma alanınıza yüklenmiş bir veri kümeniz olmalı. Artık güncellemelere geçebilirsiniz.1. Varsayılan olarak Eager Execution
TensorFlow 2.0’da artık bir oturum oluşturup hesaplama grafiğini onun içinde çalıştırmanız gerekmiyor. Eager execution 2.0 sürümünde varsayılan olarak etkindir; böylece modellerinizi kurup anında çalıştırabilirsiniz. İsterseniz eager execution’ı şu şekilde devre dışı bırakabilirsiniz:tf.compat.v1.disable_eager_execution()(tensorflow’untftakma adıyla içe aktarıldığı varsayılır.)Bu farkı gösteren küçük bir kod karşılaştırması şöyle -
2. tf.function ve AutoGraph
Eager execution size imperatif programlama olanağı sağlarken, dağıtık eğitim, tam ölçekli optimizasyon, üretim ortamları söz konusu olduğunda
TensorFlow 1.xtarzı grafik yürütmenin eager execution’a göre avantajları vardır.TensorFlow 2.0’da grafik tabanlı yürütmeleri daha esnek bir şekilde korursunuz. Bu,tf.functionveAutoGraphile sağlanır.tf.function,AutoGraphözelliği sayesinde Python tarzı sözdizimiyleTensorFlowgrafikleri tanımlamanızı sağlar.AutoGraph,ifdeyimi,fordöngüsü,whiledöngüsü,Iterator’lar vb. dahil olmak üzere geniş bir Python uyumluluğu sunar. Ancak sınırlamalar da vardır. Mevcut desteklerin tam listesini burada bulabilirsiniz. Aşağıda yalnızca birdecoratorile birTensorFlowgrafiğinin ne kadar kolay tanımlanabileceğini gösteren bir örnek yer alıyor.single_layer()işlevini çalıştırmak için herhangi bir oturum veya placeholder oluşturmanız gerekmediğine dikkat edin. Bu,tf.function’ın kullanışlı özelliklerinden biridir. Arka planda, kodunuzun daha hızlı çalışması için gerekli tüm iyileştirmeleri yapar.3.
tf.variable_scopeartık gerekmiyorTensorFlow 1.x’te,tf.layers’ı değişken olarak kullanmak ve yeniden kullanmak içintf.variablebloğunu kullanmanız gerekirdi. AncakTensorFlow 2.0’da bu artık gerekli değil.TensorFlow 2.0’da merkezde yüksek seviyeli API olarakkerasbulunduğundan,tf.layerskullanılarak oluşturulan tüm katmanlar kolayca birtf.keras.Sequentialtanımına yerleştirilebilir. Bu, kodu çok daha okunur kılar ve değişkenleri ve kayıpları da takip edebilirsiniz.İşte bir örnek:
Yukarıdaki örnekte, ham çıktı olasılıklarını almak için
modelüzerinden eğitim verilerini geçirdiniz. Bu yalnızca bir ileri beslemedir. Elbette modelinizi eğitmeye devam edebilirsiniz -Modelin katman katman eğitilebilir parametrelerinin listesini şu şekilde alabilirsiniz -
4. Özel Katmanlar Çok Kolaylaştı
Makine öğrenmesi araştırmalarında veya endüstriyel uygulamalarda, belirli kullanım senaryolarına uygun özel katmanlar yazma ihtiyacı sıkça doğar.
TensorFlow 2.0, özel bir katman yazmayı ve mevcut katmanlarla birlikte kullanmayı son derece kolaylaştırır. Modelinizin ileri beslemesini de istediğiniz şekilde özelleştirebilirsiniz.Özel bir katman oluşturmak için en kolay seçenek,
tf.keras.layersiçindekiLayersınıfını genişletmek ve buna göre tanımlamaktır. Bir özel katman oluşturacak ve ardından ileri hesaplamalarını tanımlayacaksınız. Aşağıdahelp(tf.keras.layers.Layer)çalıştırıldığında alınan çıktı bulunuyor. Bu işi yapmak için neleri belirtmeniz gerektiğini gösterir:Yukarıdaki bölümden hareketle şunları yapacaksınız -
build()yönteminde katmanınız için ağırlıkları ekleyincall()yönteminde matris çarpımı verelu()’yu zincirleyerek ileri beslemeyi tanımlayıntf.kerasiçindekiModelsınıfını genişleterek birden çok katmanı bir araya getirebilirsiniz. Modelleri birleştirme hakkında daha fazlasını burada bulabilirsiniz.5. Model Eğitiminde Esneklik
TensorFlow, kayıp fonksiyonunun gradyanlarını model parametrelerine göre hesaplamak için otomatik türev alma kullanabilir.tf.GradientTape, bir bağlam içinde bir kaset oluşturur veTensorFlowbu kasete kaydedilen her hesaplamadan gradyanları takip etmek için bunu kullanır. Bunu anlamak içintf.keras.Modelsınıfını genişleterek daha düşük seviyeli bir şekilde bir model tanımlayalım.Bu modelin topolojisinin, daha önce tanımladığınız modelle bire bir aynı olduğuna dikkat edin. Bu modeli otomatik türev alma ile eğitebilmek için kayıp fonksiyonunu ve optimize ediciyi farklı şekilde tanımlamanız gerekir -
Şimdi, ağın eğitiminde performansı ölçmek için kullanılacak metrikleri tanımlayacaksınız. Performanstan kasıt, burada modelin kaybı ve doğruluğudur.
tf.data, girdi veri hatlarını tanımlamak için yardımcı yöntemler sağlar. Bu, özellikle büyük hacimli verilerle uğraşırken çok kullanışlıdır.Şimdi, modelin eğitimi sırasında veri kümeleri üretecek veri üreticisini tanımlayacaksınız.
Artık modeli
tf.GradientTapekullanarak eğitmeye hazırsınız. Öncelikle,tf.data.DataSetkullanarak az önce tanımladığınız verilerle modeli eğitecek bir yöntem tanımlayacaksınız. Hesaplamada sunduğu hız avantajından yararlanmak için model eğitim adımlarınıtf.functiondecorator’ü ile de sarmalayacaksınız.Model eğitimi ve doğrulama
Yukarıdaki iki yöntemi kullanarak modeli 5 epoch boyunca eğitin ve doğrulayın.
Bu örnek,
TensorFlow 2.0yazarlarının bu örneğinden esinlenilmiştir.6. TensorFlow Datasets
Ağ modeliyle şık bir şekilde çalışmak için
DataSetsadlı ayrı bir modül kullanılır. Bunu önceki örnekte zaten gördünüz. Bu bölümde, MNIST veri kümesini tam istediğiniz şekilde nasıl yükleyebileceğinizi göreceksiniz.tensorflow_datasetskütüphanesinipipile kurabilirsiniz. Kurulum tamamlandıktan sonra hazırsınız. Veri kümesi kurulum hattınızı esnek şekilde hazırlamanıza yardımcı olan çeşitli yardımcı işlevler sağlar. Bu işlevler hakkında daha fazlasını buradan ve buradan öğrenebilirsiniz. Şimdi MNIST veri kümesini yüklemek için bir veri giriş hattının nasıl kurulacağını göreceksiniz.Uyarıyı yok sayabilirsiniz.
tensorflow_datasets’in veri hattını ne kadar zarif bir şekilde ele aldığına dikkat edin.Şimdi yüklediğiniz görüntü koleksiyonundan ilk görüntüyü gösterebilirsiniz. Not:
tensorflow_datasets, eager modda da grafik tabanlı ayarda da çalışır.7. Otomatik Karma Hassasiyet (Mixed Precision) Politikası
Karma hassasiyet politikası geçen yıl NVIDIA tarafından önerildi. Orijinal makaleyi burada bulabilirsiniz. Karma hassasiyetin temel fikri, yarım (FP16) ve tam (FP32) hassasiyetin bir karışımını kullanarak her iki dünyanın da avantajlarından yararlanmaktır. Çok derin sinir ağlarının eğitiminde (hem süre hem de skor açısından) etkileyici sonuçlar göstermiştir.
CUDA etkin bir GPU ortamında (ör. Volta Nesli, Tesla T4) ve
TensorFlow 2.0’ın GPU varyantını kurduysanız,TensorFlow’a karma hassasiyette eğitim yapmasını şu şekilde söyleyebilirsiniz -os.environ['TF_ENABLE_AUTO_MIXED_PRECISION'] = '1'Bu, bir TensorFlow grafiğinin işlemlerini otomatik olarak uygun şekilde dönüştürür. Modelinizin performansında iyi bir artış görebilirsiniz. TensorFlow çekirdek işlemlerini de karma hassasiyet politikasıyla optimize edebilirsiniz. Daha fazlası için bu makaleye göz atın.
Lütfen dikkat: Bu özellik yalnızca NVIDIA’ın TensorFlow Docker konteynerinde desteklenir. Karma hassasiyetli eğitimi tf.keras içine yerel olarak entegre edebilmek için bu makaleye bakmanızı öneririm. Bunu bana hatırlattığı için Abhishek Thanki’ye teşekkür ederim.
8. Dağıtık Eğitim
TensorFlow 2.0, eğitim sürecini birden fazla GPU’ya dağıtmayı son derece kolaylaştırır. Bu, çok yüksek yükleri karşılamanız gereken üretim amaçları için özellikle kullanışlıdır. Yapmanız gereken, model eğitim bloğunuzu birwithbloğunun içine koymak kadar basittir.Önce aşağıdaki gibi bir dağıtım stratejisi belirtirsiniz:
mirrored_strategy = tf.distribute.MirroredStrategy()Yansıtılmış bir strateji, GPU başına bir kopya oluşturur ve model değişkenleri GPU’lar arasında eşit şekilde yansıtılır. Tanımladığınız stratejiyi artık şu şekilde kullanabilirsiniz:
Not: Yukarıdaki kod parçası yalnızca tek bir sistemde birden çok GPU yapılandırılmışsa faydalı olacaktır. Yapılandırabileceğiniz bir dizi dağıtım stratejisi vardır. Daha fazlasını burada bulabilirsiniz.
9. Jupyter Notebook İçinde TensorBoard
Muhtemelen bu güncellemenin en heyecan verici kısmı bu. Model eğitimini doğrudan Jupyter Notebook’unuzda
TensorBoardaracılığıyla görselleştirebilirsiniz. YeniTensorBoard, bellek profilleme, karışıklık matrisi dahil görüntü verilerini görüntüleme, kavramsal model grafiği vb. gibi birçok heyecan verici özellikle yüklü geliyor. Daha fazlasını burada bulabilirsiniz.Bu bölümde,
TensorBoard’un Jupyter Notebook içinde görüntülenmesi için ortamınızı yapılandıracaksınız. Öncetensorboard.notebooknotebook uzantısını yüklemeniz gerekir -Şimdi
tf.keras.callbacksmodülünü kullanarakTensorBoardgeri çağırımını tanımlayacaksınız.Modeli
tf.keras’ınSequentialAPI’sini kullanarak yeniden kurun -Eğitim ve test kümeleri farklı kullanımlar için değiştirilmişti. Bu yüzden tekrar ayırmak iyi bir fikir olacaktır -
Modeli eğitmeye tamamen hazırsınız -
TensorBoardpanosu Jupyter Notebook’unuzda yüklenmeli ve eğitim ile doğrulama metriklerini izleyebilmelisiniz.10. Swift için TensorFlow
Tüm olağanüstü başarısına rağmen, Python hakkında üzücü olan bir şey onun yavaş olmasıdır. Araştırmacılara, uygulayıcılara ve hatta yeni başlayanlara yardımcı olmak için
TensorFlowekibi Swift için bir sürüm geliştirdi. Python varyantı kadar üretime hazır olmasa da kesinlikle potansiyele sahip. Swift, daha düşük seviyeli etkileşimlere ve gelişmiş derleme modüllerine olanak tanır. TensorFlow’un Swift varyantına ilişkin her şeyi burada bulabilirsiniz. Ayrıca Josh Gordon’ın yaptığı bu röportajı da görmeniz önerilir; burada Jeremy Howard bu yöndeki görüşlerini paylaşıyor.Sırada Ne Var?
Bu yazının sonuna geldiniz. Derin öğrenmenin güzelliği uygulamadadır. Bir sonraki adımınız, bu yazıda tartışılan fikirleri denemek ve uygulamaya koymak olmalı. Bu
TensorFlowgüncellemesi, en kapsamlı ve geliştirici dostu güncellemelerden biri. Bu yılınTensorFlowDev Summit’ine ait YouTube izleme listesini kontrol etmeniz önerilir; buradaTensorFlow lattice,TensorFlow probability,TensorFlow liteve daha fazlasına ilişkin ek güncellemeler bulacaksınız.Derin öğrenme bilginizi güçlendirmekle ilgileniyorsanız aşağıdaki kurslara göz atabilirsiniz:
Mutlu
eager_executing!