Tarihi kaydet! Google I / O 18-20 Mayıs'ta geri dönüyor Şimdi kaydolun
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Değişkenlere Giriş

TensorFlow.org'da görüntüleyin Google Colab'de çalıştırın Kaynağı GitHub'da görüntüleyin Defteri indirin

TensorFlow değişkeni , programınızın işlediğ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 , değeri üzerinde oplar çalıştırılarak 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. Gibi yüksek seviyeli kütüphaneler tf.keras kullanmak tf.Variable mağaza modeli parametrelerine.

Kurulum

Bu defter, değişken yerleşimi anlatmaktadır. Değişkenlerinizin hangi cihaza yerleştirildiğini görmek istiyorsanız, bu satırın açıklamasını 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 dtype ve şekle sahiptirler ve NumPy'ye aktarılabilirler.

print("Shape: ", my_variable.shape)
print("DType: ", my_variable.dtype)
print("As NumPy: ", my_variable.numpy())
Shape:  (2, 2)
DType:  <dtype: 'float32'>
As NumPy:  [[1. 2.]
 [3. 4.]]

Tensör işlemlerinin çoğu, beklendiği gibi değişkenler üzerinde ç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])))
A 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 tf.Variable.assign . Çağrı assign (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}")
ValueError: Shapes (2,) and (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ı hafızayı paylaşmayacaktır.

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.]
[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 hata ayıklamanıza yardımcı olabilecek şekilde adlandırılabilir. İki değişkene aynı adı 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)
tf.Tensor(
[[False False]
 [False False]], shape=(2, 2), dtype=bool)

Modeller kaydedilirken ve yüklenirken değişken isimler korunur. Varsayılan olarak, modellerdeki değişkenler otomatik olarak benzersiz değişken adları alır, bu nedenle istemedikçe bunları kendiniz atamanıza gerek yoktur.

Değişkenler farklılaştırma için önemli olsa da, bazı değişkenlerin farklılaştırılması gerekmeyecektir. Oluşturma sırasında trainable yanlış olarak ayarlayarak bir değişken için degradeleri kapatabilirsiniz. Gradyanlara ihtiyaç duymayan bir değişkene örnek 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, dtype ile uyumlu en hızlı cihaza tensörleri ve değişkenleri yerleştirmeye dtype . Bu, çoğu değişkenin varsa bir GPU'ya yerleştirildiği anlamına gelir.

Ancak bunu geçersiz kılabilirsiniz. Bu kod parçacığında, bir GPU mevcut olsa bile CPU'ya bir kayan nokta tensörü ve bir değişken yerleştirin. Aygıt yerleştirme günlüğünü etkinleştirerek ( Kurulum'a bakın), 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 kayıtları görürsünüz. Günlük kaydı cihaz yerleşiminin oturumun başında açılması 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)
tf.Tensor(
[[22. 28.]
 [49. 64.]], shape=(2, 2), dtype=float32)

Bir değişken veya tensörün konumunu bir cihazda ayarlamak ve hesaplamayı başka bir cihazda yapmak mümkündür. Verilerin cihazlar arasında kopyalanması gerektiğinden bu, gecikmeye neden olacaktır.

Ancak, 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)
tf.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ştırma kılavuzumuza bakın.