TensorFlow.org'da görüntüleyin | Google Colab'da çalıştırın | Kaynağı GitHub'da görüntüleyin | Not defterini indir |
Bu, aşağıdakilerin nasıl yapılacağını gösteren giriş niteliğinde bir TensorFlow öğreticisidir:
- 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 önyüz 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 şekli vardır. Ek olarak, tf.Tensor
s hızlandırıcı belleğinde (GPU gibi) bulunabilir. TensorFlow, tf.Tensor
s tüketen ve üreten zengin bir işlem kitaplığı ( tf.add , tf.matmul , tf.linalg.inv vb.) sunar. 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))
tutucu2 l10n-yertf.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 şekli ve bir veri tipi vardır:
x = tf.matmul([[1]], [[2, 3]])
print(x)
print(x.shape)
print(x.dtype)
tutucu4 l10n-yertf.Tensor([[2 3]], shape=(1, 2), dtype=int32) (1, 2) <dtype: 'int32'>
NumPy dizileri ve tf.Tensor
s arasındaki en belirgin farklar şunlardır:
- Tensörler, hızlandırıcı bellek (GPU, TPU gibi) tarafından desteklenebilir.
- Tensörler değişmezdir.
NumPy Uyumluluğu
TensorFlow tf.Tensor
s ve NumPy ndarray
arasında dönüştürme yapmak kolaydır:
- TensorFlow işlemleri, NumPy ndarray'lerini otomatik olarak Tensörlere dönüştürür.
- NumPy işlemleri, Tensörleri otomatik olarak NumPy ndarray'lerine dönüştürür.
Tensörler, .numpy()
yöntemleri kullanılarak açıkça NumPy ndarray'lerine dönüştürülür. Dizi ve tf.Tensor
, mümkünse, temel bellek temsilini paylaştığından, bu dönüştürmeler genellikle ucuzdur. Ancak, tf.Tensor
GPU belleğinde barındırılabilirken, NumPy dizileri her zaman ana bilgisayar belleği tarafından desteklendiğinden ve dönüştürme GPU'dan ana bilgisayar belleğine bir kopya içerdiğinden, temel temsili paylaşmak her zaman mümkün değildir.
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())
tutucu6 l10n-yerTensorFlow 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 açıklama olmadan, TensorFlow otomatik olarak bir işlem için GPU mu yoksa CPU mu kullanılacağına karar verir; gerekirse tensörü CPU ve GPU belleği arasında kopyalar. Bir işlem tarafından üretilen tensörler tipik olarak işlemin yürütüldüğü cihazın belleği 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'))
tutucu8 l10n-yerIs 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 cihazın tam nitelikli bir dize adını sağlar. Bu ad, bu programın yürütüldüğü ana bilgisayarın ağ adresinin tanımlayıcısı ve bu ana bilgisayardaki aygıt gibi birçok ayrıntıyı kodlar. Bu, bir TensorFlow programının dağıtılmış yürütülmesi için gereklidir. Dize GPU:<N>
ile biter, eğer tensör ana bilgisayardaki N
-inci GPU'ya yerleştirilirse.
Açık Cihaz Yerleştirme
TensorFlow'da yerleştirme , bireysel işlemlerin yürütme için bir cihaza nasıl atandığını (yerleştirildiğini) ifade eder. Belirtildiği gibi, sağlanan açık bir kılavuz olmadığında, TensorFlow hangi cihazın bir işlemi gerçekleştireceğ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)
tutucu10 l10n-yerOn CPU: 10 loops: 91.47ms On GPU: 10 loops: 388.16ms
veri kümeleri
Bu bölüm, modelinize veri beslemek için bir ardışık düzen 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 performanslı, karmaşık girdi ardışık düzenleri 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 uygula
Dönüşümleri veri kümesi kayıtlarına 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)
yinele
tf.data.Dataset
nesneleri, kayıtlar üzerinde döngü oluşturmak 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)
tutucu14 l10n-yerElements of ds_tensors: tf.Tensor([1 9], shape=(2,), dtype=int32) tf.Tensor([16 4], shape=(2,), dtype=int32) tf.Tensor([25 36], 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)