Asas TensorFlow: Tensor, Bentuk, Jenis, Sesi & Pengendali

Isi kandungan:

Anonim

Apa itu Tensor?

Nama Tensorflow berasal secara langsung dari kerangka terasnya: Tensor. Dalam Tensorflow, semua pengiraan melibatkan tensor. Tensor adalah vektor atau matriks n-dimensi yang mewakili semua jenis data. Semua nilai dalam tensor mempunyai jenis data yang sama dengan bentuk yang diketahui (atau sebahagiannya diketahui). Bentuk data adalah dimensi matriks atau larik.

Tensor boleh berasal dari data input atau hasil pengiraan. Di TensorFlow, semua operasi dilakukan di dalam grafik. Grafik adalah satu set pengiraan yang berlaku berturut-turut. Setiap operasi dipanggil simpul op dan saling terhubung.

Grafik menggariskan ops dan hubungan antara nod. Walau bagaimanapun, ia tidak menunjukkan nilai. Tepi nod adalah tensor, iaitu, cara untuk mengisi operasi dengan data.

Dalam Pembelajaran Mesin, model diberi makan dengan senarai objek yang disebut vektor ciri. Vektor ciri boleh terdiri dari sebarang jenis data. Vektor ciri biasanya akan menjadi input utama untuk mengisi tensor. Nilai-nilai ini akan mengalir ke simpul op melalui tensor dan hasil operasi / pengiraan ini akan mewujudkan tensor baru yang seterusnya akan digunakan dalam operasi baru. Semua operasi ini dapat dilihat dalam grafik.

Dalam tutorial ini, anda akan mempelajari asas-asas TensorFlow seperti-

  • Apa itu Tensor?
  • Perwakilan Tensor
  • Jenis-Jenis Tensor
  • Buat tensor n-dimensi
  • Bentuk tensor
  • Jenis data
  • Membuat pengendali
  • Beberapa pengendali TensorFlow Berguna
  • Pemboleh ubah
  • Pemegang tempat
  • Sesi
  • Grafik

Perwakilan Tensor

Dalam TensorFlow, tensor adalah kumpulan vektor ciri (iaitu, array) dimensi n. Sebagai contoh, jika kita mempunyai matriks 2x3 dengan nilai dari 1 hingga 6, kita menulis:

Perwakilan Tensor

TensorFlow mewakili matriks ini sebagai:

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

Sekiranya kita membuat matriks tiga dimensi dengan nilai dari 1 hingga 8, kita mempunyai:

TensorFlow mewakili matriks ini sebagai:

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

Catatan: Tensor dapat diwakili dengan skalar atau dapat memiliki bentuk lebih dari tiga dimensi. Cukup rumit untuk memvisualisasikan tahap dimensi yang lebih tinggi.

Jenis-Jenis Tensor

Di TensorFlow, semua pengiraan melalui satu atau lebih tensor. Tf.tensor adalah objek dengan tiga sifat:

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

Setiap operasi yang akan anda lakukan dengan TensorFlow melibatkan manipulasi tensor. Terdapat empat jenis tensor utama yang boleh anda buat:

  • t. Berubah
  • tf.konsisten
  • tf. pemegang tempat
  • tf.SparseTensor

Dalam tutorial ini, anda akan belajar bagaimana membuat tf.constant dan tf.Variable.

Sebelum kita mengikuti tutorial, pastikan anda mengaktifkan persekitaran konda dengan TensorFlow. Kami menamakan persekitaran ini hello-tf.

Untuk pengguna MacOS:

source activate hello-tf 

Untuk pengguna Windows:

activate hello-tf 

Selepas anda melakukannya, anda bersedia untuk mengimport tensorflow

# Import tfimport tensorflow as tf 

Buat tensor n-dimensi

Anda bermula dengan penciptaan tensor dengan satu dimensi, iaitu skalar.

Untuk membuat tensor, anda boleh menggunakan tf.constant () seperti yang ditunjukkan dalam contoh bentuk tensor TensorFlow di bawah:

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 kod berikut

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

Pengeluaran

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

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

Pengeluaran

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

Setiap tensor ditunjukkan dengan nama tensor. Setiap objek tensor didefinisikan dengan atribut tensor seperti label unik (nama), dimensi (bentuk) dan jenis data TensorFlow (dtype).

Anda boleh menentukan tensor dengan nilai perpuluhan atau dengan rentetan dengan mengubah jenis data.

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

Pengeluaran

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

Tensor dimensi 1 boleh dibuat seperti 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) 

Pengeluaran

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

Anda dapat melihat bentuk TensorFlow hanya terdiri dari 1 lajur.

Untuk membuat susunan 2 dimensi tensor, anda perlu menutup kurungan selepas setiap baris. Lihat contoh bentuk Keras Tensor di bawah

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

Pengeluaran

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

Matriks mempunyai 2 baris dan 2 lajur yang diisi dengan nilai 1, 2, 3, 4.

Matriks dengan 3 dimensi dibina dengan menambahkan tahap lain dengan tanda kurung.

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

Pengeluaran

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

Matriksnya seperti gambar dua.

Bentuk tensor

Semasa anda mencetak tensor, TensorFlow meneka bentuknya. Walau bagaimanapun, anda boleh mendapatkan bentuk tensor dengan sifat bentuk TensorFlow.

Di bawah ini, anda membina matriks yang diisi dengan nombor dari 10 hingga 15 dan anda melihat bentuk m_shape

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

Pengeluaran

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

Matriks mempunyai 3 baris dan 2 lajur.

TensorFlow mempunyai arahan berguna untuk membuat vektor atau matriks yang diisi dengan 0 atau 1. Contohnya, jika anda ingin membuat tensor 1-D dengan bentuk tertentu 10, diisi dengan 0, anda boleh menjalankan kod di bawah:

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

Pengeluaran

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

Tempat ini juga berfungsi untuk matriks. Di sini, anda membuat matriks 10x10 yang diisi dengan 1

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

Pengeluaran

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

Anda boleh menggunakan bentuk matriks yang diberikan untuk membuat vektor. Matriks m_shape adalah dimensi 3x2. Anda boleh membuat tensor dengan 3 baris yang diisi oleh seseorang dengan kod berikut:

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

Pengeluaran

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

Sekiranya anda memasukkan nilai 1 ke dalam kurungan, anda boleh membina vektor yang sama dengan bilangan lajur dalam bentuk matriks.

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

Pengeluaran

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

Akhirnya, anda boleh membuat matriks 3x2 dengan satu sahaja

print(tf.ones(m_shape.shape)) 

Pengeluaran

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

Jenis data

Sifat kedua tensor adalah jenis data. Tensor hanya boleh mempunyai satu jenis data pada satu masa. Tensor hanya boleh mempunyai satu jenis data. Anda boleh mengembalikan jenisnya dengan jenis harta tanah.

print(m_shape.dtype) 

Pengeluaran

 

Dalam beberapa keadaan, anda ingin menukar jenis data. Di TensorFlow, boleh dilakukan dengan kaedah tf.cast.

Contohnya

Di bawah ini, float tensor ditukar menjadi integer menggunakan anda menggunakan kaedah 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) 

Pengeluaran


 

TensorFlow memilih jenis data secara automatik apabila argumen tidak ditentukan semasa pembuatan tensor. TensorFlow akan meneka jenis data yang paling mungkin. Sebagai contoh, jika anda menyampaikan teks, ia akan menebaknya sebagai rentetan dan mengubahnya menjadi rentetan.

Membuat pengendali

Beberapa pengendali TensorFlow Berguna

Anda tahu bagaimana membuat tensor dengan TensorFlow. Inilah masanya untuk belajar bagaimana melakukan operasi matematik.

TensorFlow mengandungi semua operasi asas. Anda boleh mulakan dengan yang mudah. Anda akan menggunakan kaedah TensorFlow untuk mengira kuasa dua nombor. Operasi ini mudah kerana hanya diperlukan satu argumen untuk membina tensor.

Kuadrat nombor dibina dengan tf.sqrt (x) dengan x sebagai nombor terapung.

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

Pengeluaran

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

Catatan: Output mengembalikan objek tensor dan bukan hasil kuasa dua dari 2. Pada contohnya, anda mencetak definisi tensor dan bukan penilaian sebenar operasi. Di bahagian seterusnya, anda akan belajar bagaimana TensorFlow berfungsi untuk melaksanakan operasi.

Berikut adalah senarai operasi yang biasa digunakan. Ideanya sama. Setiap operasi memerlukan satu atau lebih argumen.

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

Contohnya

# 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) 

Pengeluaran

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

Penjelasan Kod

Buat dua tensor:

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

Anda menambah kedua-dua tensor.

Perhatikan : bahawa kedua-dua tensor harus mempunyai bentuk yang sama. Anda boleh melakukan pendaraban di atas dua tensor.

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

Pengeluaran

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

Pemboleh ubah

Setakat ini, anda hanya mencipta tensor berterusan. Ia tidak berguna. Data selalu tiba dengan nilai yang berbeza, untuk menangkapnya, anda boleh menggunakan kelas Pembolehubah. Ini akan mewakili simpul di mana nilainya selalu berubah.

Untuk membuat pemboleh ubah, anda boleh menggunakan kaedah 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. 

Contohnya, kod di bawah membuat pemboleh ubah dua dimensi dengan dua nilai rawak. Secara lalai, TensorFlow mengembalikan nilai rawak. Anda namakan pemboleh ubah var

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

Pengeluaran

(1, 2) 

Dalam contoh kedua, anda membuat pemboleh ubah dengan satu baris dan dua lajur. Anda perlu menggunakan [1,2] untuk membuat dimensi pemboleh ubah

Nilai awal tensor ini adalah sifar. Sebagai contoh, semasa anda melatih model, anda perlu mempunyai nilai awal untuk menghitung berat fitur. Di bawah, anda menetapkan nilai awal ini kepada sifar.

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

Pengeluaran

(1, 2) 

Anda boleh meneruskan nilai tensor malar dalam pemboleh ubah. Anda membuat tensor tetap dengan kaedah tf.constant (). Anda menggunakan tensor ini untuk memulakan pemboleh ubah.

Nilai pertama pemboleh ubah adalah 10, 20, 30 dan 40. Tensor baru akan mempunyai bentuk 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) 

Pengeluaran

(2, 2) 

Pemegang tempat

Pemegang tempat mempunyai tujuan memberi makan tensor. Tempat letak digunakan untuk menginisialisasi data untuk mengalir di dalam tensor. Untuk membekalkan placeholder, anda perlu menggunakan kaedah feed_dict. Pemegang tempat hanya akan diberi makan dalam satu sesi.

Dalam contoh seterusnya, anda akan melihat cara membuat placeholder dengan kaedah tf.placeholder. Pada sesi seterusnya, anda akan belajar memberi makan kepada placeholder dengan nilai tensor sebenar.

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) 

Pengeluaran

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

Sesi

TensorFlow berfungsi sekitar 3 komponen utama:

  • Grafik
  • Tensor
  • Sesi
Komponen Penerangan

Grafik

Grafik adalah asas dalam TensorFlow. Semua operasi matematik (ops) dilakukan di dalam grafik. Anda boleh membayangkan grafik sebagai projek di mana setiap operasi dilakukan. Node mewakili ops ini, mereka dapat menyerap atau membuat tensor baru.

Tensor

Tensor mewakili data yang berkembang antara operasi. Anda pernah melihat bagaimana memulakan tensor. Perbezaan antara pemalar dan pemboleh ubah adalah nilai awal pemboleh ubah akan berubah dari masa ke masa.

Sesi

Sesi akan melaksanakan operasi dari grafik. Untuk memberi makan grafik dengan nilai tensor, anda perlu membuka sesi. Di dalam sesi, anda mesti menjalankan pengendali untuk membuat output.

Grafik dan sesi adalah bebas. Anda boleh menjalankan sesi dan mendapatkan nilai yang akan digunakan kemudian untuk pengiraan selanjutnya.

Dalam contoh di bawah, 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 pengiraan akan berlaku dalam sesi tersebut. Setelah selesai, anda perlu menutup sesi.

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

Pengeluaran

[8] 

Penjelasan kod

  • tf. Sesi (): Buka sesi. Semua operasi akan mengalir dalam sesi
  • jalankan (darab): laksanakan operasi yang dibuat pada langkah 2.
  • cetak (hasil_1): Akhirnya, anda boleh mencetak hasilnya
  • tutup (): Tutup sesi

Hasilnya menunjukkan 8, yang merupakan pendaraban x dan y.

Kaedah lain untuk membuat sesi adalah di dalam blok. Kelebihannya adalah secara automatik menutup sesi.

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

Pengeluaran

[8] 

Dalam konteks sesi, anda boleh menggunakan kaedah eval () untuk menjalankan operasi. Ia bersamaan dengan menjalankan (). Ini menjadikan kod lebih mudah dibaca.

Anda boleh membuat sesi dan melihat nilai di dalam tensor yang anda buat setakat ini.

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

Pengeluaran

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

Pemboleh ubah kosong secara lalai, walaupun selepas anda membuat tensor. Anda perlu memulakan pembolehubah jika anda ingin menggunakan pemboleh ubah. Objek tf.global_variables_initializer () perlu dipanggil untuk memulakan nilai pemboleh ubah. Objek ini secara eksplisit akan memulakan semua pemboleh ubah. Ini berguna sebelum anda melatih model.

Anda boleh menyemak nilai pemboleh ubah yang anda buat sebelumnya. Perhatikan bahawa anda perlu menggunakan run untuk menilai tensor

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

Pengeluaran

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

Anda boleh menggunakan placeholder yang anda buat sebelumnya dan memberi makan dengan nilai sebenar. Anda perlu memasukkan data ke dalam kaedah feed_dict.

Sebagai contoh, anda akan menggunakan kuasa 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 Kod

  • import numpy sebagai np: Import library numpy untuk membuat data
  • tf.pow (data_placeholder_a, 2): Buat ops
  • np.random.rand (1, 10): Buat susunan data rawak
  • feed_dict = {data_placeholder_a: data}: Beri tempat letak dengan data

Pengeluaran

[[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 genius untuk membuat operasi. Semua pengiraan diwakili dengan skema aliran data. Grafik aliran data telah dikembangkan untuk melihat kebergantungan data antara operasi individu. Rumus atau algoritma matematik dibuat daripada sejumlah operasi berturut-turut. Grafik adalah kaedah mudah untuk menggambarkan bagaimana pengiraan diselaraskan.

Grafik menunjukkan nod dan pinggir . Node adalah representasi operasi, iaitu unit pengiraan. Tepi adalah tensor, ia dapat menghasilkan tensor baru atau menggunakan data input. Ia bergantung pada pergantungan antara operasi individu.

Struktur grafik menghubungkan operasi bersama (iaitu nod) dan bagaimana operasi adalah suapan. Perhatikan bahawa grafik tidak menunjukkan output operasi, ia hanya membantu untuk menggambarkan hubungan antara operasi individu.

Mari lihat contoh.

Bayangkan anda mahu menilai fungsi berikut:

TensorFlow akan membuat grafik untuk melaksanakan fungsi tersebut. Grafik kelihatan seperti ini:

Contoh Graf TensorFlow

Anda dapat dengan mudah melihat jalan yang akan diambil oleh tensor untuk sampai ke destinasi akhir.

Sebagai contoh, anda dapat melihat operasi tambah tidak dapat dilakukan sebelum dan. Grafik menjelaskan bahawa ia akan:

  1. mengira dan:
  2. tambah 1) bersama
  3. tambah kepada 2)
  4. tambah 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 Kod

  • x: Memulakan pemboleh ubah yang dipanggil x dengan nilai tetap 5
  • z: Memulakan pemboleh ubah yang disebut z dengan nilai tetap 6
  • c: Memulakan tensor malar yang disebut c dengan nilai malar 5
  • segi empat sama: Memulakan tensor malar yang dipanggil kuasa dua dengan nilai tetap 2
  • f: Bentukkan operator

Dalam contoh ini, kita memilih untuk memastikan nilai pemboleh ubah tetap. Kami juga membuat tensor malar yang disebut c yang merupakan parameter malar dalam fungsi f. Ia memerlukan nilai tetap 5. Dalam grafik, anda dapat melihat parameter ini dalam tensor yang disebut pemalar.

Kami juga membina tensor tetap untuk kuasa pada operator tf.pow (). Ia tidak perlu. Kami melakukannya supaya anda dapat melihat nama tensor dalam grafik. Ia adalah bulatan yang disebut segi empat sama.

Dari grafik, anda dapat memahami apa yang akan berlaku pada tensor dan bagaimana ia dapat mengembalikan output 66.

Kod di bawah menilai fungsi dalam satu 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) 

Pengeluaran

[66] 

Ringkasan

TensorFlow berfungsi:

  • Grafik : Persekitaran komputasi yang mengandungi operasi dan tensor
  • Tensor : Mewakili data (atau nilai) yang akan mengalir dalam grafik. Ini adalah pinggir dalam grafik
  • Sesi : Benarkan pelaksanaan operasi

Buat tensor tetap

pemalar objek

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 Objek

a + b

tf.add (a, b)

a * b

tf.multiply (a, b)

Buat tensor pemboleh ubah

Buat pemboleh ubah

objek

nilai rawak

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

nilai pertama yang dimulakan

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

Buka sesi

Sesi objek

Buat sesi

t. Sesi ()

Jalankan sesi

tf. Sesi. jalankan ()

Nilaikan tensor

pemboleh ubah_nama.eval ()

Tutup sesi

sess.tutup ()

Sesi mengikut blok

dengan tf. Sesi () sebagai sess: