Lihat di TensorFlow.org | Jalankan di Google Colab | Lihat sumber di GitHub | Unduh buku catatan |
Ini adalah tutorial pengantar TensorFlow yang menunjukkan cara:
- Impor paket yang diperlukan
- Membuat dan menggunakan tensor
- Gunakan akselerasi GPU
- Mendemonstrasikan
tf.data.Dataset
Impor TensorFlow
Untuk memulai, impor modul tensorflow
. Mulai TensorFlow 2, eksekusi bersemangat diaktifkan secara default. Ini memungkinkan antarmuka yang lebih interaktif untuk TensorFlow, detailnya akan kita bahas nanti.
import tensorflow as tf
Tensor
Tensor adalah array multidimensi. Mirip dengan objek ndarray
NumPy, objek tf.Tensor
memiliki tipe data dan bentuk. Selain itu, tf.Tensor
s dapat berada di memori akselerator (seperti GPU). TensorFlow menawarkan perpustakaan operasi yang kaya ( tf.add , tf.matmul , tf.linalg.inv dll.) yang menggunakan dan menghasilkan tf.Tensor
s. Operasi ini secara otomatis mengonversi tipe Python asli, misalnya:
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)
Setiap tf.Tensor
memiliki bentuk dan tipe data:
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'>
Perbedaan paling jelas antara array NumPy dan tf.Tensor
s adalah:
- Tensor dapat didukung oleh memori akselerator (seperti GPU, TPU).
- Tensor tidak dapat diubah.
Kompatibilitas NumPy
Mengonversi antara TensorFlow tf.Tensor
s dan NumPy ndarray
itu mudah:
- Operasi TensorFlow secara otomatis mengonversi NumPy ndarrays ke Tensor.
- Operasi NumPy secara otomatis mengonversi Tensor ke ndarray NumPy.
Tensor secara eksplisit dikonversi ke NumPy ndarrays menggunakan metode .numpy()
mereka. Konversi ini biasanya murah karena array dan tf.Tensor
berbagi representasi memori yang mendasarinya, jika memungkinkan. Namun, berbagi representasi yang mendasarinya tidak selalu memungkinkan karena tf.Tensor
dapat di-host di memori GPU sementara array NumPy selalu didukung oleh memori host, dan konversi melibatkan salinan dari GPU ke memori host.
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.]]
Akselerasi GPU
Banyak operasi TensorFlow dipercepat menggunakan GPU untuk komputasi. Tanpa anotasi apa pun, TensorFlow secara otomatis memutuskan apakah akan menggunakan GPU atau CPU untuk suatu operasi—menyalin tensor antara CPU dan memori GPU, jika perlu. Tensor yang dihasilkan oleh suatu operasi biasanya didukung oleh memori perangkat tempat operasi dijalankan, misalnya:
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
Nama Perangkat
Properti Tensor.device
memberikan nama string yang sepenuhnya memenuhi syarat untuk perangkat yang menghosting konten tensor. Nama ini mengkodekan banyak detail, seperti pengidentifikasi alamat jaringan host tempat program ini dijalankan dan perangkat di dalam host tersebut. Ini diperlukan untuk eksekusi terdistribusi dari program TensorFlow. String diakhiri dengan GPU:<N>
jika tensor ditempatkan pada GPU ke- N
pada host.
Penempatan Perangkat Eksplisit
Di TensorFlow, penempatan mengacu pada bagaimana masing-masing operasi ditetapkan (ditempatkan pada) perangkat untuk dieksekusi. Seperti yang disebutkan, jika tidak ada panduan eksplisit yang diberikan, TensorFlow secara otomatis memutuskan perangkat mana yang akan menjalankan operasi dan menyalin tensor ke perangkat tersebut, jika diperlukan. Namun, operasi TensorFlow dapat ditempatkan secara eksplisit pada perangkat tertentu menggunakan pengelola konteks tf.device
, misalnya:
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: 91.47ms On GPU: 10 loops: 388.16ms
Kumpulan data
Bagian ini menggunakan tf.data.Dataset
API untuk membangun pipeline untuk memasukkan data ke model Anda. tf.data.Dataset
API digunakan untuk membuat pipeline input yang kompleks dan berkinerja tinggi dari bagian sederhana yang dapat digunakan kembali yang akan memberi makan loop pelatihan atau evaluasi model Anda.
Buat Dataset
sumber
Buat kumpulan data sumber menggunakan salah satu fungsi pabrik seperti Dataset.from_tensors
, Dataset.from_tensor_slices
, atau menggunakan objek yang membaca dari file seperti TextLineDataset
atau TFRecordDataset
. Lihat panduan Kumpulan Data TensorFlow untuk informasi selengkapnya.
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)
Terapkan transformasi
Gunakan fungsi transformasi seperti map
, batch
, dan shuffle
untuk menerapkan transformasi ke catatan kumpulan data.
ds_tensors = ds_tensors.map(tf.square).shuffle(2).batch(2)
ds_file = ds_file.batch(2)
Pengulangan
Objek tf.data.Dataset
mendukung iterasi untuk mengulang rekaman:
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 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)