![]() | ![]() | ![]() | ![]() |
این یک آموزش مقدماتی TensorFlow است که نحوه:
- بسته مورد نیاز را وارد کنید
- تنسور ایجاد و استفاده کنید
- از شتاب GPU استفاده کنید
tf.data.Dataset
نشانtf.data.Dataset
وارد کردن TensorFlow
برای شروع ، ماژول tensorflow
را وارد کنید. از TensorFlow 2 ، اجرای اشتیاق به طور پیش فرض روشن است. این یک زمینه تعاملی تر به TensorFlow را امکان پذیر می کند ، که جزئیات آن را بعداً بحث خواهیم کرد.
import tensorflow as tf
تنسورها
Tensor یک آرایه چند بعدی است. مشابه اشیا ndarray
NumPy ، اشیا tf.Tensor
دارای یک نوع داده و شکل هستند. علاوه بر این ، tf.Tensor
می تواند در حافظه شتاب دهنده (مانند GPU) قرار داشته باشد. TensorFlow یک کتابخانه غنی از عملیات ( tf.add ، tf.matmul ، tf.linalg.inv و غیره) را ارائه می دهد که tf.Tensor
s را مصرف و تولید می کند. این عملیات بطور خودکار انواع پایتون بومی را تبدیل می کند ، به عنوان مثال:
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)
هر tf.Tensor
دارای یک شکل و یک نوع داده است:
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 و tf.Tensor
عبارتند از:
- حسگرها را می توان با حافظه شتاب دهنده (مانند GPU ، TPU) پشتیبانی کرد.
- تنورها تغییرناپذیر هستند.
سازگاری با NumPy
تبدیل بین یک TensorFlow tf.Tensor
s و نامپای ndarray
آسان است:
- عملیات TensorFlow به طور خودکار تقسیم بندی های NumPy را به تنور تبدیل می کند.
- عملیات NumPy به طور خودکار تنورها را به تقسیم بندی های NumPy تبدیل می کند.
سنسورها با استفاده از روش .numpy()
صریحاً به تقسیم بندی های NumPy تبدیل می شوند. این تبدیل ها از آرایه و tf.Tensor
معمولاً ارزان هستند. در صورت امکان ، tf.Tensor
نمایش حافظه اساسی را به اشتراک می گذارد. با این حال ، به اشتراک گذاشتن نمایندگی اساسی همیشه ممکن نیست. tf.Tensor
ممکن است در حافظه GPU میزبانی شود در حالی که آرایه های NumPy همیشه توسط حافظه میزبان پشتیبانی می شوند ، و تبدیل شامل یک نسخه از GPU به حافظه میزبان است.
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
بسیاری از عملیات TensorFlow با استفاده از GPU برای محاسبه تسریع می شود. بدون هیچ حاشیه نویسی ، TensorFlow به طور خودکار تصمیم می گیرد که آیا از GPU یا CPU برای عملیاتی استفاده می کند - در صورت لزوم ، کپی کردن سنسور بین حافظه CPU و GPU. سنسورهای تولید شده توسط یک عملیات معمولاً توسط حافظه دستگاهی که عملیات روی آن اجرا شده پشتیبانی می شود ، به عنوان مثال:
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
نام دستگاه
ویژگی Tensor.device
نام رشته ای کاملاً واجد شرایط دستگاه میزبان محتویات تنسور را فراهم می کند. این نام جزئیات بسیاری را رمزگذاری می کند ، مانند شناسه آدرس شبکه میزبانی که این برنامه بر روی آن اجرا می کند و دستگاه درون آن میزبان. این برای اجرای توزیع شده یک برنامه TensorFlow لازم است. رشته با GPU:<N>
به پایان می رسد GPU:<N>
اگر تانسور روی GPU N
-th روی میزبان قرار گیرد.
قرار دادن صریح دستگاه
در TensorFlow ، قرار دادن به نحوه اختصاص (قرار دادن ) عملیات فردی برای اجرای دستگاه اشاره دارد. همانطور که گفته شد ، در صورت عدم ارائه راهنمایی صریح ، TensorFlow به طور خودکار تصمیم می گیرد کدام دستگاه را عملیاتی انجام دهد و در صورت لزوم ، سنسورها را در آن دستگاه کپی می کند. با این حال ، عملیات TensorFlow را می توان با استفاده از مدیر زمینه tf.device
به طور صریح در دستگاه های خاص قرار داد ، به عنوان مثال:
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
مجموعه داده ها
در این بخش از API tf.data.Dataset
برای ایجاد خط لوله تغذیه داده ها به مدل شما استفاده می شود.tf.data.Dataset
API برای ساخت خطوط لوله ورودی پیچیده ، از قطعات ساده و قابل استفاده مجدد استفاده می شود که حلقه های آموزش یا ارزیابی مدل شما را تغذیه می کنند.
یک Dataset
منبع ایجاد کنید
با استفاده از یکی از عملکردهای کارخانه مانند Dataset.from_tensors
، Dataset.from_tensor_slices
یا استفاده از اشیایی که از پرونده هایی مانند TextLineDataset
یا TFRecordDataset
خوانده می Dataset.from_tensor_slices
، یک مجموعه داده منبع ایجاد کنید. برای اطلاعات بیشتر به راهنمای TensorFlow Dataset مراجعه کنید.
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)
تحولات را اعمال کنید
استفاده از توابع تحولات مانند map
، batch
، و shuffle
به درخواست تحولات به مجموعه داده سوابق.
ds_tensors = ds_tensors.map(tf.square).shuffle(2).batch(2)
ds_file = ds_file.batch(2)
تکرار کردن
اشیاtf.data.Dataset
برای حل کردن سوابق از تکرار پشتیبانی می کنند:
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)