TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir |
Bir TensorFlow değişkeni , programınızın manipüle ettiği paylaşılan, kalıcı durumu temsil etmenin önerilen yoludur. Bu kılavuz, tf.Variable
örneklerinin nasıl oluşturulacağını, güncelleneceğini ve yönetileceğini kapsar.
Değişkenler tf.Variable
sınıfı aracılığıyla oluşturulur ve izlenir. Bir tf.Variable
, üzerinde ops çalıştırılarak değeri değiştirilebilen bir tensörü temsil eder. Belirli işlemler, bu tensörün değerlerini okumanıza ve değiştirmenize izin verir. tf.Variable
gibi daha yüksek seviyeli kitaplıklar, model parametrelerini depolamak için tf.keras
kullanır.
Kurmak
Bu not defterinde değişken yerleşim anlatılmaktadır. Değişkenlerinizin hangi cihaza yerleştirildiğini görmek istiyorsanız, bu satırın yorumunu kaldırın.
import tensorflow as tf
# Uncomment to see where your variables get placed (see below)
# tf.debugging.set_log_device_placement(True)
Değişken oluştur
Bir değişken oluşturmak için bir başlangıç değeri sağlayın. tf.Variable
, başlatma değeriyle aynı dtype
sahip olacaktır.
my_tensor = tf.constant([[1.0, 2.0], [3.0, 4.0]])
my_variable = tf.Variable(my_tensor)
# Variables can be all kinds of types, just like tensors
bool_variable = tf.Variable([False, False, False, True])
complex_variable = tf.Variable([5 + 4j, 6 + 1j])
Bir değişken, bir tensör gibi görünür ve hareket eder ve aslında, bir tf.Tensor
tarafından desteklenen bir veri yapısıdır. Tensörler gibi, bir türü ve şekli vardır ve dtype
aktarılabilirler.
print("Shape: ", my_variable.shape)
print("DType: ", my_variable.dtype)
print("As NumPy: ", my_variable.numpy())
tutucu3 l10n-yerShape: (2, 2) DType: <dtype: 'float32'> As NumPy: [[1. 2.] [3. 4.]]
Çoğu tensör işlemi değişkenler üzerinde beklendiği gibi çalışır, ancak değişkenler yeniden şekillendirilemez.
print("A variable:", my_variable)
print("\nViewed as a tensor:", tf.convert_to_tensor(my_variable))
print("\nIndex of highest value:", tf.argmax(my_variable))
# This creates a new tensor; it does not reshape the variable.
print("\nCopying and reshaping: ", tf.reshape(my_variable, [1,4]))
tutucu5 l10n-yerA variable: <tf.Variable 'Variable:0' shape=(2, 2) dtype=float32, numpy= array([[1., 2.], [3., 4.]], dtype=float32)> Viewed as a tensor: tf.Tensor( [[1. 2.] [3. 4.]], shape=(2, 2), dtype=float32) Index of highest value: tf.Tensor([1 1], shape=(2,), dtype=int64) Copying and reshaping: tf.Tensor([[1. 2. 3. 4.]], shape=(1, 4), dtype=float32)
Yukarıda belirtildiği gibi, değişkenler tensörler tarafından desteklenir. tf.Variable.assign
kullanarak tensörü yeniden atayabilirsiniz. assign
çağırmak (genellikle) yeni bir tensör tahsis etmez; bunun yerine, mevcut tensörün belleği yeniden kullanılır.
a = tf.Variable([2.0, 3.0])
# This will keep the same dtype, float32
a.assign([1, 2])
# Not allowed as it resizes the variable:
try:
a.assign([1.0, 2.0, 3.0])
except Exception as e:
print(f"{type(e).__name__}: {e}")
tutucu7 l10n-yerValueError: Cannot assign to variable Variable:0 due to variable shape (2,) and value shape (3,) are incompatible
İşlemlerde tensör gibi bir değişken kullanırsanız, genellikle destek tensörü üzerinde işlem yaparsınız.
Mevcut değişkenlerden yeni değişkenler oluşturmak, destek tensörlerini çoğaltır. İki değişken aynı belleği paylaşmaz.
a = tf.Variable([2.0, 3.0])
# Create b based on the value of a
b = tf.Variable(a)
a.assign([5, 6])
# a and b are different
print(a.numpy())
print(b.numpy())
# There are other versions of assign
print(a.assign_add([2,3]).numpy()) # [7. 9.]
print(a.assign_sub([7,9]).numpy()) # [0. 0.]
tutucu9 l10n-yer[5. 6.] [2. 3.] [7. 9.] [0. 0.]
Yaşam döngüleri, adlandırma ve izleme
Python tabanlı TensorFlow'da tf.Variable
örneği, diğer Python nesneleriyle aynı yaşam döngüsüne sahiptir. Bir değişkene referans olmadığında, otomatik olarak serbest bırakılır.
Değişkenler, onları izlemenize ve hatalarını ayıklamanıza yardımcı olabilecek şekilde adlandırılabilir. Aynı ismi iki değişkene verebilirsiniz.
# Create a and b; they will have the same name but will be backed by
# different tensors.
a = tf.Variable(my_tensor, name="Mark")
# A new variable with the same name, but different value
# Note that the scalar add is broadcast
b = tf.Variable(my_tensor + 1, name="Mark")
# These are elementwise-unequal, despite having the same name
print(a == b)
tutucu11 l10n-yertf.Tensor( [[False False] [False False]], shape=(2, 2), dtype=bool)
Modeller kaydedilirken ve yüklenirken değişken adları korunur. Varsayılan olarak, modellerdeki değişkenler otomatik olarak benzersiz değişken adları alacaktır, bu nedenle istemediğiniz sürece bunları kendiniz atamanız gerekmez.
Değişkenler farklılaşma için önemli olsa da, bazı değişkenlerin farklılaştırılması gerekmeyecektir. Oluşturma sırasında trainable
ayarını false olarak ayarlayarak bir değişken için degradeleri kapatabilirsiniz. Degradelere ihtiyaç duymayan bir değişken örneği, bir eğitim adım sayacıdır.
step_counter = tf.Variable(1, trainable=False)
Değişkenleri ve tensörleri yerleştirme
Daha iyi performans için TensorFlow, tensörleri ve değişkenleri dtype
ile uyumlu en hızlı cihaza yerleştirmeye çalışacaktır. Bu, varsa çoğu değişkenin bir GPU'ya yerleştirildiği anlamına gelir.
Ancak, bunu geçersiz kılabilirsiniz. Bu pasajda, bir GPU mevcut olsa bile CPU'ya bir kayan tensör ve bir değişken yerleştirin. Cihaz yerleşimi günlüğünü açarak (bkz. Kurulum ), değişkenin nereye yerleştirildiğini görebilirsiniz.
Bu not defterini GPU'lu ve GPU'suz farklı arka uçlarda çalıştırırsanız, farklı günlük kaydı görürsünüz. Oturumun başında kayıt cihazı yerleştirmenin açık olması gerektiğini unutmayın.
with tf.device('CPU:0'):
# Create some tensors
a = tf.Variable([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.constant([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
c = tf.matmul(a, b)
print(c)
tutucu14 l10n-yertf.Tensor( [[22. 28.] [49. 64.]], shape=(2, 2), dtype=float32)
Bir cihazda bir değişkenin veya tensörün konumunu ayarlamak ve hesaplamayı başka bir cihazda yapmak mümkündür. Bu, verilerin cihazlar arasında kopyalanması gerektiğinden gecikmeye neden olacaktır.
Bununla birlikte, birden fazla GPU çalışanınız varsa ancak değişkenlerin yalnızca bir kopyasını istiyorsanız bunu yapabilirsiniz.
with tf.device('CPU:0'):
a = tf.Variable([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
b = tf.Variable([[1.0, 2.0, 3.0]])
with tf.device('GPU:0'):
# Element-wise multiply
k = a * b
print(k)
tutucu16 l10n-yertf.Tensor( [[ 1. 4. 9.] [ 4. 10. 18.]], shape=(2, 3), dtype=float32)
Dağıtılmış eğitim hakkında daha fazla bilgi için kılavuzumuza bakın.
Sonraki adımlar
Değişkenlerin tipik olarak nasıl kullanıldığını anlamak için otomatik farklılaşma kılavuzumuza bakın.