Değişkenlere Giriş

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şken paylaşılan temsil önerilen yoludur, kalıcı hal program yöneten olduğunu. Bu kılavuz kapakları nasıl oluşturmak, güncellemek ve örneklerini yönetmek için tf.Variable TensorFlow içinde.

Değişkenler oluşturulur ve üzeri izlenir tf.Variable sınıfa. Bir tf.Variable değeri üzerinde ops çalıştırarak değiştirilebilir bir tensörünün 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.

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 aynı olacaktır dtype başlatma değeri.

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 görünüm ve aslında, bir tarafından desteklenen bir veri yapısıdır, bir tensör gibi davranır ve tf.Tensor . Tensörlerin gibi, onlar bir var dtype ve bir şekil ve numpy ihraç edilebilir.

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.]]

Ç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]))
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. Sen kullanarak tensörünü yeniden atayabilirsiniz tf.Variable.assign . Arayan assign (genellikle) yeni tensörünü 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: 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.]
[5. 6.]
[2. 3.]
[7. 9.]
[0. 0.]

Yaşam döngüleri, adlandırma ve izleme

Python tabanlı TensorFlow olarak, tf.Variable diğer Python nesneler olarak, örneğin, aynı bir yaşam döngüsü vardır. 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)
tf.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. Sen ayarlayarak değişken için geçişlerini kapatabilirsiniz trainable yaratılması yanlış olarak. 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 onun uyumlu en hızlı cihazda yer tensörleri ve değişkenler dener dtype . 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ştirme günlük (bkz açarak Kur'u değişken yerleştirildiği) 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)
tf.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)
tf.Tensor(
[[ 1.  4.  9.]
 [ 4. 10. 18.]], shape=(2, 3), dtype=float32)

Dağıtılan eğitim hakkında daha fazlası için, bkz rehberimize .

Sonraki adımlar

Değişkenler genellikle nasıl kullanıldığını anlamak için, bizim kılavuzuna bakın otomatik farklılaşma .