Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Dasar-dasar penyesuaian: tensor dan operasi

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 dibutuhkan
  • Buat dan gunakan tensor
  • Gunakan akselerasi GPU
  • Peragakan tf.data.Dataset

Impor TensorFlow

Untuk memulai, impor modul tensorflow . Mulai TensorFlow 2, eager execution diaktifkan secara default. Ini memungkinkan frontend yang lebih interaktif ke TensorFlow, yang detailnya akan kita diskusikan nanti.

import tensorflow as tf

Tensor

Tensor adalah larik multi-dimensi. 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 pustaka operasi yang kaya ( tf.add , tf.matmul , tf.linalg.inv , dll.) Yang mengkonsumsi dan menghasilkan tf.Tensor s. Operasi ini secara otomatis mengonversi jenis 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 adalah:

  1. Tensor dapat didukung oleh memori akselerator (seperti GPU, TPU).
  2. Tensor tidak bisa diubah.

Kompatibilitas NumPy

Mengonversi antara TensorFlow tf.Tensor s dan ndarray NumPy itu mudah:

  • Operasi TensorFlow secara otomatis mengonversi ndarrays NumPy menjadi Tensor.
  • Operasi NumPy secara otomatis mengubah Tensor menjadi ndarrays NumPy.

Tensor secara eksplisit dikonversi ke ndarrays NumPy menggunakan metode .numpy() . 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 dihosting 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 yang 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 memori CPU dan 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.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

Nama Perangkat

Properti Tensor.device menyediakan nama string yang sepenuhnya memenuhi syarat dari perangkat yang menghosting konten tensor. Nama ini mengkodekan banyak detail, seperti pengenal alamat jaringan dari host tempat program ini dijalankan dan perangkat di dalam host itu. Ini diperlukan untuk eksekusi program TensorFlow yang didistribusikan. String diakhiri dengan GPU:<N> jika tensor ditempatkan pada GPU ke- N pada host.

Penempatan Perangkat Eksplisit

Di TensorFlow, penempatan mengacu pada bagaimana setiap operasi ditetapkan (ditempatkan pada) perangkat untuk dieksekusi. Seperti yang disebutkan, jika tidak ada panduan eksplisit yang disediakan, TensorFlow secara otomatis memutuskan perangkat mana yang akan menjalankan operasi dan menyalin tensor ke perangkat itu, jika diperlukan. Namun, operasi TensorFlow dapat secara eksplisit ditempatkan pada perangkat tertentu menggunakan tf.device 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.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

Set data

Bagian ini menggunakan API tf.data.Dataset untuk membuat pipeline guna memasukkan data ke model Anda. API tf.data.Dataset digunakan untuk membuat pipeline input yang kompleks dan berperforma tinggi dari bagian sederhana yang dapat digunakan kembali yang akan tf.data.Dataset 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 Set Data TensorFlow untuk informasi lebih lanjut.

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 rekaman set 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 catatan:

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)