Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

tf.function

TensorFlow 1 sürümü Kaynağı GitHub'da görüntüle

Bir işlevi çağrılabilir TensorFlow grafiğinde derler.

Dizüstü bilgisayarlarda kullanılır

Kılavuzda kullanılır Öğreticilerde kullanılır

tf.function yapılar bir çağrılabilir bu yürüttüğü bir TensorFlow grafiktir ( tf.Graph izi-derlenmesinde TensorFlow işlemleri ile oluşturulan) func etkili bir şekilde yürütülmesi func bir TensorFlow grafik olarak.

Örnek kullanım:

@tf.function
def f(x, y):
  return x ** 2 + y
x = tf.constant([2, 3])
y = tf.constant([3, -2])
f(x, y)
<tf.Tensor: ... numpy=array([7, 7], ...)>

Özellikleri

func dahil, veriye bağlı kontrol akışını kullanabilir if , for , while break , continue ve return ifadeleri:

@tf.function
def f(x):
  if tf.reduce_sum(x) > 0:
    return x * x
  else:
    return -x // 2
f(tf.constant(-2))
<tf.Tensor: ... numpy=1>

func içerebilir kapatılması; tf.Tensor ve tf.Variable nesneleri:

@tf.function
def f():
  return x ** 2 + y
x = tf.constant([-2, -3])
y = tf.Variable([3, -2])
f()
<tf.Tensor: ... numpy=array([7, 7], ...)>

func ayrıca tf.print , tf.Variable ve diğerleri gibi yan etkileri olan ops kullanabilir:

v = tf.Variable(1)
@tf.function
def f(x):
  for i in tf.range(x):
    v.assign_add(i)
f(3)
v
<tf.Variable ... numpy=4>
l = []
@tf.function
def f(x):
  for i in x:
    l.append(i + 1)    # Caution! Will only happen once when tracing
f(tf.constant([1, 2, 3]))
l
[<tf.Tensor ...>]

Bunun yerine, tf.TensorArray gibi tf.TensorArray koleksiyonlarını kullanın:

@tf.function
def f(x):
  ta = tf.TensorArray(dtype=tf.int32, size=0, dynamic_size=True)
  for i in range(len(x)):
    ta = ta.write(i, x[i] + 1)
  return ta.stack()
f(tf.constant([1, 2, 3]))
<tf.Tensor: ..., numpy=array([2, 3, 4], ...)>

tf.function polimorfiktir

Dahili olarak, tf.function , farklı veri türlerine veya şekillerine sahip bağımsız değişkenleri desteklemek için birden fazla grafik oluşturabilir, çünkü TensorFlow, şekiller ve türler üzerinde uzmanlaşmış daha verimli grafikler oluşturabilir. tf.function ayrıca herhangi bir saf Python değerini opak nesneler olarak ele alır ve karşılaştığı her Python argümanı kümesi için ayrı bir grafik oluşturur.

Bağımsız bir grafik elde etmek için, kullanımı get_concrete_function yarattığı çağrılabilir yöntemini tf.function . Bu aynı argümanları ile çağrılabilir func ve özel bir döner tf.Graph nesne:

@tf.function
def f(x):
  return x + 1
isinstance(f.get_concrete_function(1).graph, tf.Graph)
True
@tf.function
def f(x):
  return tf.abs(x)
f1 = f.get_concrete_function(1)
f2 = f.get_concrete_function(2)  # Slow - builds new graph
f1 is f2
False
f1 = f.get_concrete_function(tf.constant(1))
f2 = f.get_concrete_function(tf.constant(2))  # Fast - reuses f1
f1 is f2
True

Python sayısal bağımsız değişkenleri yalnızca sinir ağındaki katman sayısı gibi hiperparametreler gibi birkaç farklı değer aldıklarında kullanılmalıdır.

Giriş imzaları

Tensor bağımsız değişkenleri için, tf.function , her benzersiz giriş şekli ve veri türü kümesi için ayrı bir grafik başlatır. Aşağıdaki örnek, her biri farklı bir şekle göre özelleştirilmiş iki ayrı grafik oluşturur:

@tf.function
def f(x):
  return x + 1
vector = tf.constant([1.0, 1.0])
matrix = tf.constant([[3.0]])
f.get_concrete_function(vector) is f.get_concrete_function(matrix)
False

tf.function grafikleri kontrol etmek için isteğe bağlı olarak tf.function bir "giriş imzası" sağlanabilir. Giriş imzası, bir tf.TensorSpec nesnesi kullanarak işleve ait her bir Tensor bağımsız değişkeninin şeklini ve türünü belirtir. Daha genel şekiller kullanılabilir. Bu, Tensörler dinamik şekillere sahip olduğunda birden çok grafik oluşturmaktan kaçınmak için yararlıdır. Ayrıca, kullanılabilecek Tensörlerin şeklini ve veri tipini kısıtlar:

@tf.function(
    input_signature=[tf.TensorSpec(shape=None, dtype=tf.float32)])
def f(x):
  return x + 1
vector = tf.constant([1.0, 1.0])