![]() | ![]() | ![]() | ![]() |
Bu, aşağıdakilerin nasıl yapılacağını gösteren 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 ö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 şekli vardır. Ek olarak, tf.Tensor
s hızlandırıcı belleğinde (GPU gibi) bulunabilir. TensorFlow, tf.add , tf.matmul , tf.linalg.inv vb. tf.Tensor
tüketen ve üreten zengin bir işlem kitaplığı 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))
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:
- Tensörler, hızlandırıcı belleği (GPU, TPU gibi) ile desteklenebilir.
- 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, Tensörleri otomatik olarak 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 gösterimini paylaştığından, bu dönüşümler genellikle ucuzdur. Ancak, 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.experimental.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ütülmesi 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.experimental.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: 102.06ms On GPU: 10 loops: 231.87ms
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 kullanarak 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ürmeler 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ü 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)
Elements of ds_tensors: tf.Tensor([1 4], shape=(2,), dtype=int32) tf.Tensor([16 9], 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)