Google I / O'daki önemli notları, ürün oturumlarını, atölyeleri ve daha fazlasını izleyin Oynatma listesine bakın

Özelleştirme temelleri: tensörler ve işlemler

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

Bu, aşağıdakilerin nasıl yapılacağını gösteren giriş niteliğinde bir TensorFlow eğitimidir:

  • Gerekli paketi içe aktarın
  • Tensörler oluşturun ve kullanın
  • GPU hızlandırmayı kullan
  • tf.data.Dataset

TensorFlow'u İçe Aktar

Başlamak için tensorflow modülünü içe aktarın. TensorFlow 2'den itibaren, istekli yürütme varsayılan olarak açıktır. Bu, ayrıntılarını daha sonra tartışacağımız TensorFlow için daha etkileşimli bir ön uç sağlar.

import tensorflow as tf

Tensörler

Tensör, çok boyutlu bir dizidir. NumPy ndarray nesnelerine benzer şekilde, tf.Tensor nesnelerinin bir veri türü ve bir şekli vardır. Ek olarak, tf.Tensor s hızlandırıcı belleğinde (GPU gibi) bulunabilir. TensorFlow operasyonları (zengin kütüphane sunmaktadır tf.add , tf.matmul , tf.linalg.inv tüketmek ve üretmek vs.) tf.Tensor s. Bu işlemler yerel Python türlerini otomatik olarak dönüştürür, örneğin:

print(tf.add(1, 2))
print(tf.add([1, 2], [3, 4]))
print(tf.square(5))
print(tf.reduce_sum([1, 2, 3]))

# Operator overloading is also supported
print(tf.square(2) + tf.square(3))
tf.Tensor(3, shape=(), dtype=int32)
tf.Tensor([4 6], shape=(2,), dtype=int32)
tf.Tensor(25, shape=(), dtype=int32)
tf.Tensor(6, shape=(), dtype=int32)
tf.Tensor(13, shape=(), dtype=int32)

Her tf.Tensor bir şekle ve bir veri türüne sahiptir:

x = tf.matmul([[1]], [[2, 3]])
print(x)
print(x.shape)
print(x.dtype)
tf.Tensor([[2 3]], shape=(1, 2), dtype=int32)
(1, 2)
<dtype: 'int32'>

NumPy dizileri ile tf.Tensor arasındaki en belirgin farklar şunlardır:

  1. Tensörler, hızlandırıcı belleği (GPU, TPU gibi) ile desteklenebilir.
  2. Tensörler değişmezdir.

NumPy Uyumluluğu

TensorFlow tf.Tensor s ve bir NumPy ndarray arasında dönüştürme yapmak kolaydır:

  • TensorFlow işlemleri, NumPy ndarray'leri otomatik olarak Tensörlere dönüştürür.
  • NumPy işlemleri otomatik olarak Tensörleri NumPy ndarrays'e dönüştürür.

Tensörler, .numpy() yöntemlerini kullanarak açıkça NumPy ndarrays'e dönüştürülür. Dizi ve tf.Tensor mümkünse temeldeki bellek temsilini paylaştığından, bu dönüşümler genellikle ucuzdur. Bununla birlikte, temel temsili paylaşmak her zaman mümkün değildir, çünkü tf.Tensor GPU belleğinde barındırılabilirken NumPy dizileri her zaman ana bellek tarafından desteklenir ve dönüştürme, GPU'dan ana belleğe bir kopya içerir.

import numpy as np

ndarray = np.ones([3, 3])

print("TensorFlow operations convert numpy arrays to Tensors automatically")
tensor = tf.multiply(ndarray, 42)
print(tensor)


print("And NumPy operations convert Tensors to numpy arrays automatically")
print(np.add(tensor, 1))

print("The .numpy() method explicitly converts a Tensor to a numpy array")
print(tensor.numpy())
TensorFlow operations convert numpy arrays to Tensors automatically
tf.Tensor(
[[42. 42. 42.]
 [42. 42. 42.]
 [42. 42. 42.]], shape=(3, 3), dtype=float64)
And NumPy operations convert Tensors to numpy arrays automatically
[[43. 43. 43.]
 [43. 43. 43.]
 [43. 43. 43.]]
The .numpy() method explicitly converts a Tensor to a numpy array
[[42. 42. 42.]
 [42. 42. 42.]
 [42. 42. 42.]]

GPU hızlandırma

Birçok TensorFlow işlemi, hesaplama için GPU kullanılarak hızlandırılır. Herhangi bir ek açıklama olmadan TensorFlow, bir işlem için GPU'nun veya CPU'nun kullanılıp kullanılmayacağına otomatik olarak karar verir - gerekirse tensörü CPU ile GPU belleği arasında kopyalar. Bir işlem tarafından üretilen tensörler, tipik olarak, üzerinde işlemin yürütüldüğü cihazın hafızası tarafından desteklenir, örneğin:

x = tf.random.uniform([3, 3])

print("Is there a GPU available: "),
print(tf.config.list_physical_devices("GPU"))

print("Is the Tensor on GPU #0:  "),
print(x.device.endswith('GPU:0'))
Is there a GPU available: 
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
Is the Tensor on GPU #0:  
True

Cihaz Adları

Tensor.device özelliği, tensörün içeriğini barındıran aygıtın tam nitelikli bir dize adını sağlar. Bu ad, bu programın çalıştırıldığı ana bilgisayarın ağ adresinin bir tanımlayıcısı ve bu ana bilgisayar içindeki aygıt gibi birçok ayrıntıyı kodlar. Bu, bir TensorFlow programının dağıtılmış yürütmesi için gereklidir. İle dize uçları GPU:<N> tensör üzerine yerleştirilirse N ana bilgisayarda ıncı GPU.

Açık Cihaz Yerleştirme

TensorFlow'da yerleştirme , tek tek işlemlerin bir aygıta yürütülmek üzere nasıl atandığını (yerleştirildiğini) ifade eder. Belirtildiği gibi, açık bir rehberlik sağlanmadığında, TensorFlow hangi cihazın bir işlemi yürüteceğine otomatik olarak karar verir ve gerekirse tensörleri bu cihaza kopyalar. Ancak, TensorFlow işlemleri tf.device bağlam yöneticisi kullanılarak belirli cihazlara açıkça yerleştirilebilir, örneğin:

import time

def time_matmul(x):
  start = time.time()
  for loop in range(10):
    tf.matmul(x, x)

  result = time.time()-start

  print("10 loops: {:0.2f}ms".format(1000*result))

# Force execution on CPU
print("On CPU:")
with tf.device("CPU:0"):
  x = tf.random.uniform([1000, 1000])
  assert x.device.endswith("CPU:0")
  time_matmul(x)

# Force execution on GPU #0 if available
if tf.config.list_physical_devices("GPU"):
  print("On GPU:")
  with tf.device("GPU:0"): # Or GPU:1 for the 2nd GPU, GPU:2 for the 3rd etc.
    x = tf.random.uniform([1000, 1000])
    assert x.device.endswith("GPU:0")
    time_matmul(x)
On CPU:
10 loops: 101.56ms
On GPU:
10 loops: 402.75ms

Veri kümeleri

Bu bölüm, modelinize veri beslemek için bir ardışık tf.data.Dataset oluşturmak için tf.data.Dataset API'sini kullanır.tf.data.Dataset API, modelinizin eğitim veya değerlendirme döngülerini besleyecek basit, yeniden kullanılabilir parçalardan yüksek performanslı, karmaşık giriş ardışıktf.data.Dataset oluşturmak için kullanılır.

Kaynak Dataset Oluşturun

Dataset.from_tensors , Dataset.from_tensor_slices gibi fabrika işlevlerinden birini veya TextLineDataset veya TFRecordDataset gibi dosyalardan okuyan nesneleri kullanarak bir kaynak veri kümesi oluşturun. Daha fazla bilgi için TensorFlow Veri Kümesi kılavuzuna bakın.

ds_tensors = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5, 6])

# Create a CSV file
import tempfile
_, filename = tempfile.mkstemp()

with open(filename, 'w') as f:
  f.write("""Line 1
Line 2
Line 3
  """)

ds_file = tf.data.TextLineDataset(filename)

Dönüşümleri uygulayın

Veri kümesi kayıtlarına dönüştürme uygulamak için map , batch ve shuffle gibi dönüştürme işlevlerini kullanın.

ds_tensors = ds_tensors.map(tf.square).shuffle(2).batch(2)

ds_file = ds_file.batch(2)

Yinelemek

tf.data.Dataset nesneleri, kayıtlar üzerinde döngü yapmak için yinelemeyi destekler:

print('Elements of ds_tensors:')
for x in ds_tensors:
  print(x)

print('\nElements in ds_file:')
for x in ds_file:
  print(x)
Elements of ds_tensors:
tf.Tensor([1 4], shape=(2,), dtype=int32)
tf.Tensor([16 25], shape=(2,), dtype=int32)
tf.Tensor([36  9], shape=(2,), dtype=int32)

Elements in ds_file:
tf.Tensor([b'Line 1' b'Line 2'], shape=(2,), dtype=string)
tf.Tensor([b'Line 3' b'  '], shape=(2,), dtype=string)