Dasar-dasar TensorFlow: Tensor, Bentuk, Jenis, Sesi & Operator

Daftar Isi:

Anonim

Apa itu Tensor?

Nama Tensorflow secara langsung berasal dari framework intinya: Tensor. Di Tensorflow, semua komputasi melibatkan tensor. Tensor adalah vektor atau matriks berdimensi-n yang mewakili semua jenis data. Semua nilai dalam tensor memiliki tipe data yang identik dengan bentuk yang diketahui (atau sebagian diketahui). Bentuk data adalah dimensi matriks atau larik.

Tensor dapat berasal dari data masukan atau hasil komputasi. Di TensorFlow, semua operasi dilakukan di dalam grafik. Grafik adalah sekumpulan komputasi yang berlangsung secara berurutan. Setiap operasi disebut node op dan terhubung satu sama lain.

Grafik menguraikan operasi dan koneksi antara node. Namun, itu tidak menampilkan nilainya. Tepi node adalah tensor, yaitu cara untuk mengisi operasi dengan data.

Dalam Machine Learning, model diberi makan dengan daftar objek yang disebut vektor fitur. Vektor fitur dapat berupa tipe data apa pun. Vektor fitur biasanya akan menjadi input utama untuk mengisi tensor. Nilai-nilai ini akan mengalir ke sebuah node op melalui tensor dan hasil operasi / komputasi ini akan menghasilkan tensor baru yang selanjutnya akan digunakan dalam operasi baru. Semua operasi ini dapat dilihat dalam grafik.

Dalam tutorial ini, Anda akan mempelajari dasar-dasar TensorFlow seperti-

  • Apa itu Tensor?
  • Representasi dari Tensor
  • Jenis Tensor
  • Buat tensor berdimensi-n
  • Bentuk tensor
  • Jenis data
  • Membuat operator
  • Beberapa operator TensorFlow yang Berguna
  • Variabel
  • Placeholder
  • Sidang
  • Grafik

Representasi dari Tensor

Di TensorFlow, tensor adalah kumpulan vektor fitur (yaitu, larik) berdimensi-n. Misalnya, jika kami memiliki matriks 2x3 dengan nilai dari 1 hingga 6, kami menulis:

Representasi dari Tensor

TensorFlow merepresentasikan matriks ini sebagai:

[[1, 2, 3],[4, 5, 6]] 

Jika kita membuat matriks tiga dimensi dengan nilai dari 1 hingga 8, kita memiliki:

TensorFlow merepresentasikan matriks ini sebagai:

[ [[1, 2],[[3, 4],[[5, 6],[[7,8] ] 

Catatan: Tensor dapat direpresentasikan dengan skalar atau dapat berbentuk lebih dari tiga dimensi. Hanya lebih rumit untuk memvisualisasikan tingkat dimensi yang lebih tinggi.

Jenis Tensor

Di TensorFlow, semua komputasi melewati satu atau beberapa tensor. Tf.tensor adalah objek dengan tiga properti:

  • Label unik (nama)
  • Dimensi (bentuk)
  • Tipe data (dtype)

Setiap operasi yang akan Anda lakukan dengan TensorFlow melibatkan manipulasi tensor. Ada empat jenis tensor utama yang dapat Anda buat:

  • tf. Variabel
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor

Dalam tutorial ini, Anda akan belajar cara membuat tf.constant dan tf.Variable.

Sebelum kita melanjutkan tutorial, pastikan Anda mengaktifkan lingkungan conda dengan TensorFlow. Kami menamai lingkungan ini hello-tf.

Untuk pengguna MacOS:

source activate hello-tf 

Untuk pengguna Windows:

activate hello-tf 

Setelah Anda selesai melakukannya, Anda siap untuk mengimpor tensorflow

# Import tfimport tensorflow as tf 

Buat tensor berdimensi-n

Anda mulai dengan pembuatan tensor dengan satu dimensi, yaitu skalar.

Untuk membuat tensor, Anda dapat menggunakan tf.constant () seperti yang ditunjukkan pada contoh bentuk tensor TensorFlow di bawah ini:

tf.constant(value, dtype, name = "")arguments- `value`: Value of n dimension to define the tensor. Optional- `dtype`: Define the type of data:- `tf.string`: String variable- `tf.float32`: Float variable- `tf.int16`: Integer variable- "name": Name of the tensor. Optional. By default, `Const_1:0` 

Untuk membuat tensor dimensi 0, jalankan kode berikut

## rank 0# Default namer1 = tf.constant(1, tf.int16)print(r1)

Keluaran

Tensor("Const:0", shape=(), dtype=int16) 

# Named my_scalarr2 = tf.constant(1, tf.int16, name = "my_scalar")print(r2) 

Keluaran

Tensor("my_scalar:0", shape=(), dtype=int16) 

Setiap tensor ditampilkan oleh nama tensor. Setiap objek tensor ditentukan dengan atribut tensor seperti label unik (nama), dimensi (bentuk), dan tipe data TensorFlow (dtype).

Anda dapat menentukan tensor dengan nilai desimal atau dengan string dengan mengubah tipe datanya.

# Decimalr1_decimal = tf.constant(1.12345, tf.float32)print(r1_decimal)# Stringr1_string = tf.constant("Guru99", tf.string)print(r1_string) 

Keluaran

Tensor("Const_1:0", shape=(), dtype=float32)Tensor("Const_2:0", shape=(), dtype=string) 

Tensor dimensi 1 dapat dibuat sebagai berikut:

## Rank 1r1_vector = tf.constant([1,3,5], tf.int16)print(r1_vector)r2_boolean = tf.constant([True, True, False], tf.bool)print(r2_boolean) 

Keluaran

Tensor("Const_3:0", shape=(3,), dtype=int16)Tensor("Const_4:0", shape=(3,), dtype=bool) 

Anda dapat melihat bahwa bentuk TensorFlow hanya terdiri dari 1 kolom.

Untuk membuat larik dengan 2 dimensi tensor, Anda perlu menutup tanda kurung setelah setiap baris. Cek contoh bentuk Keras Tensor di bawah ini

## Rank 2r2_matrix = tf.constant([ [1, 2],[3, 4] ],tf.int16)print(r2_matrix) 

Keluaran

Tensor("Const_5:0", shape=(2, 2), dtype=int16) 

Matriks tersebut memiliki 2 baris dan 2 kolom yang diisi dengan nilai 1, 2, 3, 4.

Sebuah matriks dengan 3 dimensi dibangun dengan menambahkan level lain dengan tanda kurung.

## Rank 3r3_matrix = tf.constant([ [[1, 2],[3, 4],[5, 6]] ], tf.int16)print(r3_matrix) 

Keluaran

Tensor("Const_6:0", shape=(1, 3, 2), dtype=int16) 

Matriks terlihat seperti gambar dua.

Bentuk tensor

Saat Anda mencetak tensor, TensorFlow menebak bentuknya. Namun, Anda bisa mendapatkan bentuk tensor dengan properti bentuk TensorFlow.

Di bawah ini, Anda membuat matriks yang diisi dengan angka dari 10 hingga 15 dan Anda memeriksa bentuk m_shape

# Shape of tensorm_shape = tf.constant([ [10, 11],[12, 13],[14, 15] ])m_shape.shape 

Keluaran

TensorShape([Dimension(3), Dimension(2)]) 

Matriks memiliki 3 baris dan 2 kolom.

TensorFlow memiliki perintah yang berguna untuk membuat vektor atau matriks yang diisi dengan 0 atau 1. Misalnya, jika Anda ingin membuat tensor 1-D dengan bentuk tertentu 10, diisi dengan 0, Anda dapat menjalankan kode di bawah ini:

# Create a vector of 0print(tf.zeros(10)) 

Keluaran

Tensor("zeros:0", shape=(10,), dtype=float32) 

Properti juga berfungsi untuk matriks. Di sini, Anda membuat matriks 10x10 yang diisi dengan 1

# Create a vector of 1print(tf.ones([10, 10])) 

Keluaran

Tensor("ones:0", shape=(10, 10), dtype=float32) 

Anda dapat menggunakan bentuk matriks tertentu untuk membuat vektor dari satu. Matriks m_shape adalah dimensi 3x2. Anda dapat membuat tensor dengan 3 baris diisi satu dengan kode berikut:

# Create a vector of ones with the same number of rows as m_shapeprint(tf.ones(m_shape.shape[0])) 

Keluaran

Tensor("ones_1:0", shape=(3,), dtype=float32) 

Jika Anda memasukkan nilai 1 ke dalam braket, Anda dapat membuat vektor yang sama dengan jumlah kolom dalam matriks m_shape.

# Create a vector of ones with the same number of column as m_shapeprint(tf.ones(m_shape.shape[1])) 

Keluaran

Tensor("ones_2:0", shape=(2,), dtype=float32) 

Terakhir, Anda dapat membuat matriks 3x2 hanya dengan satu matriks

print(tf.ones(m_shape.shape)) 

Keluaran

Tensor("ones_3:0", shape=(3, 2), dtype=float32) 

Jenis data

Properti kedua dari tensor adalah tipe datanya. Tensor hanya dapat memiliki satu jenis data dalam satu waktu. Tensor hanya dapat memiliki satu jenis data. Anda dapat mengembalikan tipe dengan properti dtype.

print(m_shape.dtype) 

Keluaran

 

Dalam beberapa kesempatan, Anda ingin mengubah tipe datanya. Di TensorFlow, dimungkinkan dengan metode tf.cast.

Contoh

Di bawah ini, tensor float diubah menjadi integer menggunakan Anda menggunakan metode cast.

# Change type of datatype_float = tf.constant(3.123456789, tf.float32)type_int = tf.cast(type_float, dtype=tf.int32)print(type_float.dtype)print(type_int.dtype) 

Keluaran


 

TensorFlow memilih jenis data secara otomatis ketika argumen tidak ditentukan selama pembuatan tensor. TensorFlow akan menebak jenis data yang paling mungkin. Misalnya, jika Anda mengirimkan teks, teks akan menebaknya sebagai string dan mengubahnya menjadi string.

Membuat operator

Beberapa operator TensorFlow yang Berguna

Anda tahu cara membuat tensor dengan TensorFlow. Saatnya mempelajari cara melakukan operasi matematika.

TensorFlow berisi semua operasi dasar. Anda bisa mulai dengan yang sederhana. Anda akan menggunakan metode TensorFlow untuk menghitung kuadrat angka. Operasi ini sangat mudah karena hanya satu argumen yang diperlukan untuk membuat tensor.

Kuadrat sebuah bilangan dibangun dengan tf.sqrt (x) dengan x sebagai bilangan mengambang.

x = tf.constant([2.0], dtype = tf.float32)print(tf.sqrt(x)) 

Keluaran

Tensor("Sqrt:0", shape=(1,), dtype=float32) 

Catatan: Output mengembalikan objek tensor dan bukan hasil kuadrat 2. Dalam contoh, Anda mencetak definisi tensor dan bukan evaluasi operasi yang sebenarnya. Di bagian selanjutnya, Anda akan mempelajari cara kerja TensorFlow untuk menjalankan operasi.

Berikut adalah daftar operasi yang umum digunakan. Idenya sama. Setiap operasi membutuhkan satu atau beberapa argumen.

  • tf.add (a, b)
  • tf.substract (a, b)
  • tf. multiply (a, b)
  • tf.div (a, b)
  • tf.pow (a, b)
  • tf.exp (a)
  • tf.sqrt (a)

Contoh

# Addtensor_a = tf.constant([[1,2]], dtype = tf.int32)tensor_b = tf.constant([[3, 4]], dtype = tf.int32)tensor_add = tf.add(tensor_a, tensor_b)print(tensor_add) 

Keluaran

Tensor("Add:0", shape=(1, 2), dtype=int32) 

Penjelasan Kode

Buat dua tensor:

  • satu tensor dengan 1 dan 2
  • satu tensor dengan 3 dan 4

Anda menjumlahkan kedua tensor.

Perhatikan : bahwa kedua tensor harus memiliki bentuk yang sama. Anda dapat melakukan perkalian pada dua tensor.

# Multiplytensor_multiply = tf.multiply(tensor_a, tensor_b)print(tensor_multiply) 

Keluaran

Tensor("Mul:0", shape=(1, 2), dtype=int32) 

Variabel

Sejauh ini, Anda hanya membuat tensor konstan. Ini tidak berguna. Data selalu datang dengan nilai yang berbeda, untuk menangkapnya, Anda dapat menggunakan kelas Variabel. Ini akan mewakili node di mana nilainya selalu berubah.

Untuk membuat variabel, Anda dapat menggunakan metode tf.get_variable ()

tf.get_variable(name = "", values, dtype, initializer)argument- `name = ""`: Name of the variable- `values`: Dimension of the tensor- `dtype`: Type of data. Optional- `initializer`: How to initialize the tensor. OptionalIf initializer is specified, there is no need to include the `values` as the shape of `initializer` is used. 

Misalnya, kode di bawah ini membuat variabel dua dimensi dengan dua nilai acak. Secara default, TensorFlow menampilkan nilai acak. Sebutkan variabel var

# Create a Variable## Create 2 Randomized valuesvar = tf.get_variable("var", [1, 2])print(var.shape) 

Keluaran

(1, 2) 

Pada contoh kedua, Anda membuat variabel dengan satu baris dan dua kolom. Anda perlu menggunakan [1,2] untuk membuat dimensi variabel

Nilai inisial tensor ini adalah nol. Misalnya, saat melatih model, Anda perlu memiliki nilai awal untuk menghitung bobot fitur. Di bawah ini, Anda menyetel nilai awal ini ke nol.

var_init_1 = tf.get_variable("var_init_1", [1, 2], dtype=tf.int32, initializer=tf.zeros_initializer)print(var_init_1.shape) 

Keluaran

(1, 2) 

Anda dapat meneruskan nilai tensor konstan dalam variabel. Anda membuat tensor konstan dengan metode tf.constant (). Anda menggunakan tensor ini untuk menginisialisasi variabel.

Nilai pertama variabel adalah 10, 20, 30 dan 40. Tensor baru akan berbentuk 2x2.

# Create a 2x2 matrixtensor_const = tf.constant([[10, 20],[30, 40]])# Initialize the first value of the tensor equals to tensor_constvar_init_2 = tf.get_variable("var_init_2", dtype=tf.int32, initializer=tensor_const)print(var_init_2.shape) 

Keluaran

(2, 2) 

Placeholder

Placeholder memiliki tujuan untuk memberi makan tensor. Placeholder digunakan untuk menginisialisasi data agar mengalir di dalam tensor. Untuk menyediakan placeholder, Anda perlu menggunakan metode feed_dict. Placeholder hanya akan diberi makan dalam satu sesi.

Dalam contoh berikutnya, Anda akan melihat cara membuat placeholder dengan metode tf.placeholder. Di sesi berikutnya, Anda akan belajar memberi makan placeholder dengan nilai tensor aktual.

Sintaksnya adalah:

tf.placeholder(dtype,shape=None,name=None )arguments:- `dtype`: Type of data- `shape`: dimension of the placeholder. Optional. By default, shape of the data- `name`: Name of the placeholder. Optionaldata_placeholder_a = tf.placeholder(tf.float32, name = "data_placeholder_a")print(data_placeholder_a) 

Keluaran

Tensor("data_placeholder_a:0", dtype=float32) 

Sidang

TensorFlow bekerja dengan sekitar 3 komponen utama:

  • Grafik
  • Tensor
  • Sidang
Komponen Descritption

Grafik

Grafik sangat penting di TensorFlow. Semua operasi matematika (ops) dilakukan di dalam grafik. Anda dapat membayangkan grafik sebagai proyek di mana setiap operasi dilakukan. Node mewakili operasi ini, mereka dapat menyerap atau membuat tensor baru.

Tensor

Tensor mewakili data yang berkembang antar operasi. Anda telah melihat sebelumnya cara menginisialisasi tensor. Perbedaan antara konstanta dan variabel adalah nilai awal variabel akan berubah seiring waktu.

Sidang

Sesi akan menjalankan operasi dari grafik. Untuk memberi makan grafik dengan nilai tensor, Anda perlu membuka sesi. Di dalam sesi, Anda harus menjalankan operator untuk membuat keluaran.

Grafik dan sesi bersifat independen. Anda dapat menjalankan sesi dan mendapatkan nilai yang akan digunakan nanti untuk penghitungan lebih lanjut.

Pada contoh di bawah ini, Anda akan:

  • Buat dua tensor
  • Buat operasi
  • Buka sesi
  • Cetak hasilnya

Langkah 1) Anda membuat dua tensor x dan y

## Create, run and evaluate a sessionx = tf.constant([2])y = tf.constant([4]) 

Langkah 2) Anda membuat operator dengan mengalikan x dan y

## Create operatormultiply = tf.multiply(x, y) 

Langkah 3) Anda membuka sesi. Semua perhitungan akan terjadi dalam sesi tersebut. Setelah selesai, Anda harus menutup sesi.

## Create a session to run the codesess = tf.Session()result_1 = sess.run(multiply)print(result_1)sess.close() 

Keluaran

[8] 

Penjelasan kode

  • tf.Session (): Buka sesi. Semua operasi akan mengalir dalam sesi
  • run (multiply): jalankan operasi yang dibuat pada langkah 2.
  • print (result_1): Akhirnya, Anda dapat mencetak hasilnya
  • close (): Tutup sesi

Hasilnya menunjukkan 8, yang merupakan perkalian dari x dan y.

Cara lain untuk membuat sesi adalah di dalam blok. Keuntungannya adalah secara otomatis menutup sesi.

with tf.Session() as sess:result_2 = multiply.eval()print(result_2) 

Keluaran

[8] 

Dalam konteks sesi, Anda bisa menggunakan metode eval () untuk menjalankan operasi. Ini setara dengan run (). Itu membuat kode lebih mudah dibaca.

Anda dapat membuat sesi dan melihat nilai di dalam tensor yang Anda buat sejauh ini.

## Check the tensors created beforesess = tf.Session()print(sess.run(r1))print(sess.run(r2_matrix))print(sess.run(r3_matrix)) 

Keluaran

1[[1 2][3 4]][[[1 2][3 4][5 6]]] 

Variabel kosong secara default, bahkan setelah Anda membuat tensor. Anda perlu menginisialisasi variabel jika ingin menggunakan variabel. Objek tf.global_variables_initializer () perlu dipanggil untuk menginisialisasi nilai variabel. Objek ini secara eksplisit akan menginisialisasi semua variabel. Ini berguna sebelum Anda melatih model.

Anda dapat memeriksa nilai variabel yang Anda buat sebelumnya. Perhatikan bahwa Anda perlu menggunakan run untuk mengevaluasi tensor

sess.run(tf.global_variables_initializer())print(sess.run(var))print(sess.run(var_init_1))print(sess.run(var_init_2)) 

Keluaran

[[-0.05356491 0.75867283]][[0 0]][[10 20][30 40]] 

Anda dapat menggunakan placeholder yang Anda buat sebelumnya dan memberinya makan dengan nilai sebenarnya. Anda perlu meneruskan data ke metode feed_dict.

Misalnya, Anda akan menggunakan kekuatan 2 dari placeholder data_placeholder_a.

import numpy as nppower_a = tf.pow(data_placeholder_a, 2)with tf.Session() as sess:data = np.random.rand(1, 10)print(sess.run(power_a, feed_dict={data_placeholder_a: data})) # Will succeed. 

Penjelasan Kode

  • import numpy as np: Impor pustaka numpy untuk membuat data
  • tf.pow (data_placeholder_a, 2): Buat ops
  • np.random.rand (1, 10): Membuat data array acak
  • feed_dict = {data_placeholder_a: data}: Beri makan placeholder dengan data

Keluaran

[[0.05478134 0.27213147 0.8803037 0.0398424 0.21172127 0.01444725 0.02584014 0.3763949 0.66022706 0.7565559 ]] 

Grafik

TensorFlow bergantung pada pendekatan jenius untuk merender operasi. Semua perhitungan diwakili dengan skema aliran data. Grafik aliran data telah dikembangkan untuk melihat ketergantungan data antar operasi individu. Rumus atau algoritma matematika dibuat dari sejumlah operasi yang berurutan. Grafik adalah cara mudah untuk memvisualisasikan bagaimana perhitungan dikoordinasikan.

Grafik menunjukkan simpul dan tepi . Node adalah representasi dari sebuah operasi, yaitu unit komputasi. Tepi adalah tensor, dapat menghasilkan tensor baru atau mengonsumsi data masukan. Itu tergantung pada ketergantungan antara operasi individu.

Struktur grafik menghubungkan operasi (yaitu node) dan bagaimana operasi tersebut diumpankan. Perhatikan bahwa grafik tidak menampilkan keluaran operasi, ini hanya membantu untuk memvisualisasikan hubungan antara operasi individu.

Mari kita lihat contohnya.

Bayangkan Anda ingin mengevaluasi fungsi berikut:

TensorFlow akan membuat grafik untuk menjalankan fungsi tersebut. Grafiknya terlihat seperti ini:

Contoh Grafik TensorFlow

Anda dapat dengan mudah melihat jalur yang akan diambil tensor untuk mencapai tujuan akhir.

Misalnya, Anda dapat melihat operasi menambahkan tidak dapat dilakukan sebelum dan. Grafik menjelaskan bahwa itu akan:

  1. menghitung dan:
  2. tambahkan 1) bersama-sama
  3. tambahkan ke 2)
  4. tambahkan 3) ke
x = tf.get_variable("x", dtype=tf.int32, initializer=tf.constant([5]))z = tf.get_variable("z", dtype=tf.int32, initializer=tf.constant([6]))c = tf.constant([5], name = "constant")square = tf.constant([2], name = "square")f = tf.multiply(x, z) + tf.pow(x, square) + z + c 

Penjelasan Kode

  • x: Inisialisasi variabel yang disebut x dengan nilai konstanta 5
  • z: Menginisialisasi variabel yang disebut z dengan nilai konstanta 6
  • c: Inisialisasi tensor konstan yang disebut c dengan nilai konstanta 5
  • square: Inisialisasi tensor konstan yang disebut persegi dengan nilai konstanta 2
  • f: Bangun operator

Dalam contoh ini, kami memilih untuk menjaga nilai variabel tetap. Kami juga membuat tensor konstan yang disebut c yang merupakan parameter konstan dalam fungsi f. Dibutuhkan nilai tetap 5. Pada grafik, Anda dapat melihat parameter ini dalam tensor yang disebut konstanta.

Kami juga membangun tensor konstan untuk daya di operator tf.pow (). Itu tidak perlu. Kami melakukannya agar Anda dapat melihat nama tensor di grafik. Itu adalah lingkaran yang disebut persegi.

Dari grafik, Anda dapat memahami apa yang akan terjadi pada tensor dan bagaimana ia dapat menghasilkan keluaran 66.

Kode di bawah mengevaluasi fungsi dalam sebuah sesi.

init = tf.global_variables_initializer() # prepare to initialize all variableswith tf.Session() as sess:init.run() # Initialize x and yfunction_result = f.eval()print(function_result) 

Keluaran

[66] 

Ringkasan

TensorFlow bekerja di sekitar:

  • Grafik : Lingkungan komputasi yang berisi operasi dan tensor
  • Tensor : Merupakan data (atau nilai) yang akan mengalir dalam grafik. Ini adalah tepi pada grafik
  • Sesi : Memungkinkan pelaksanaan operasi

Buat tensor konstan

konstan obyek

D0

tf.constant (1, tf.int16)

D1

tf.constant ([1,3,5], tf.int16)

D2

tf.constant ([[1, 2], [3, 4]], tf.int16)

D3

tf.constant ([[[1, 2], [3, 4], [5, 6]]], tf.int16)

Buat operator

Buat operator Obyek

a + b

tf.add (a, b)

a * b

tf. multiply (a, b)

Buat tensor variabel

Buat variabel

obyek

nilai acak

tf.get_variable ("var", [1, 2])

menginisialisasi nilai pertama

tf.get_variable ("var_init_2", dtype = tf.int32, penginisialisasi = [[1, 2], [3, 4]])

Buka sesi

Sidang obyek

Buat sesi

tf.Session ()

Jalankan sesi

tf.Session.run ()

Evaluasi tensor

variable_name.eval ()

Tutup sesi

sess.close ()

Sesi demi blok

dengan tf.Session () sebagai sess: