Theano - Panduan Cepat

Sudahkah Anda mengembangkan model Pembelajaran Mesin dengan Python? Maka, tentunya Anda mengetahui seluk-beluk dalam mengembangkan model tersebut. Pengembangan biasanya merupakan proses lambat yang memakan waktu berjam-jam dan berhari-hari.

Pengembangan model Machine Learning membutuhkan banyak perhitungan matematis. Ini umumnya membutuhkan perhitungan aritmatika terutama matriks besar dari beberapa dimensi. Saat ini kami menggunakan Jaringan Neural daripada teknik statistik tradisional untuk mengembangkan aplikasi Pembelajaran Mesin. Neural Network perlu dilatih untuk menangani sejumlah besar data. Pelatihan dilakukan dalam kumpulan data dengan ukuran yang wajar. Dengan demikian, proses pembelajaran bersifat iteratif. Jadi, jika komputasi tidak dilakukan secara efisien, pelatihan jaringan dapat memakan waktu beberapa jam atau bahkan berhari-hari. Dengan demikian, pengoptimalan kode yang dapat dieksekusi sangat diinginkan. Dan itulah yang sebenarnya Theano sediakan.

Theano adalah pustaka Python yang memungkinkan Anda menentukan ekspresi matematika yang digunakan dalam Pembelajaran Mesin, mengoptimalkan ekspresi ini dan mengevaluasinya dengan sangat efisien dengan menggunakan GPU secara meyakinkan di area kritis. Ini dapat menyaingi implementasi C penuh yang khas di sebagian besar kasus.

Theano ditulis di lab LISA dengan tujuan menyediakan pengembangan cepat dari algoritme pembelajaran mesin yang efisien. Ini dirilis di bawah lisensi BSD.

Dalam tutorial ini, Anda akan belajar menggunakan perpustakaan Theano.

Theano dapat diinstal di Windows, MacOS, dan Linux. Instalasi dalam semua kasus itu sepele. Sebelum Anda menginstal Theano, Anda harus menginstal dependensinya. Berikut ini adalah daftar dependensi -

  • Python
  • NumPy - Wajib
  • SciPy - Diperlukan hanya untuk Sparse Matrix dan fungsi khusus
  • BLAS - Menyediakan blok penyusun standar untuk melakukan operasi vektor dan matriks dasar

Paket opsional yang dapat Anda pilih untuk diinstal tergantung pada kebutuhan Anda adalah -

  • nose: Untuk menjalankan test-suite Theano
  • Sphinx - Untuk dokumentasi bangunan
  • Graphiz dan pydot - Untuk menangani grafik dan gambar
  • Driver NVIDIA CUDA - Diperlukan untuk pembuatan / eksekusi kode GPU
  • libgpuarray - Diperlukan untuk pembuatan kode GPU / CPU pada perangkat CUDA dan OpenCL

Kami akan membahas langkah-langkah untuk menginstal Theano di MacOS.

Instalasi MacOS

Untuk menginstal Theano dan dependensinya, Anda menggunakan pipdari baris perintah sebagai berikut. Ini adalah dependensi minimal yang kita perlukan dalam tutorial ini.

$ pip install Theano
$ pip install numpy
$ pip install scipy
$ pip install pydot

Anda juga perlu menginstal alat pengembang baris perintah OSx menggunakan perintah berikut -

$ xcode-select --install

Anda akan melihat layar berikut. Klik padaInstall tombol untuk menginstal alat.

Jika instalasi berhasil, Anda akan melihat pesan sukses di konsol.

Menguji Instalasi

Setelah penginstalan berhasil, buka notebook baru di Anaconda Jupyter. Di sel kode, masukkan skrip Python berikut -

Contoh

import theano
from theano import tensor
a = tensor.dscalar()
b = tensor.dscalar()
c = a + b
f = theano.function([a,b], c)
d = f(1.5, 2.5)
print (d)

Keluaran

Jalankan skrip dan Anda akan melihat output berikut -

4.0

Tangkapan layar dari eksekusi ditampilkan di bawah ini untuk referensi cepat Anda -

Jika Anda mendapatkan output di atas, instalasi Theano Anda berhasil. Jika tidak, ikuti petunjuk debug di halaman unduhan Theano untuk memperbaiki masalah.

Apa Theano?

Sekarang setelah Anda berhasil menginstal Theano, mari kita coba memahami apa itu Theano? Theano adalah pustaka Python. Ini memungkinkan Anda menentukan, mengoptimalkan, dan mengevaluasi ekspresi matematika, terutama ekspresi yang digunakan dalam pengembangan Model Pembelajaran Mesin. Theano sendiri tidak berisi model ML yang ditentukan sebelumnya; itu hanya memfasilitasi perkembangannya. Ini sangat berguna saat menangani array multi-dimensi. Ini terintegrasi secara mulus dengan NumPy, yang merupakan paket fundamental dan banyak digunakan untuk komputasi ilmiah dengan Python.

Theano memfasilitasi pendefinisian ekspresi matematika yang digunakan dalam pengembangan ML. Ekspresi semacam itu umumnya melibatkan Aritmatika Matriks, Diferensiasi, Perhitungan Gradien, dan sebagainya.

Theano pertama-tama membangun seluruh Grafik Komputasi untuk model Anda. Kemudian mengkompilasinya menjadi kode yang sangat efisien dengan menerapkan beberapa teknik pengoptimalan pada grafik. Kode yang dikompilasi disuntikkan ke runtime Theano oleh operasi khusus yang disebutfunctiontersedia di Theano. Kami melakukan inifunctionsecara berulang-ulang untuk melatih jaringan saraf. Waktu pelatihan secara substansial berkurang dibandingkan dengan menggunakan pengkodean Python murni atau bahkan implementasi C penuh.

Sekarang kita akan memahami proses pengembangan Theano. Mari kita mulai dengan cara mendefinisikan ekspresi matematika di Theano.

Mari kita mulai perjalanan Theano dengan mendefinisikan dan mengevaluasi ungkapan yang sepele di Theano. Pertimbangkan ekspresi sepele berikut yang menambahkan dua skalar -

c = a + b

Dimana a, b adalah variabel dan cadalah keluaran ekspresi. Di Theano, mendefinisikan dan mengevaluasi bahkan ekspresi yang sepele ini rumit.

Mari kita pahami langkah-langkah untuk mengevaluasi ekspresi di atas.

Mengimpor Theano

Pertama, kita perlu mengimpor pustaka Theano di program kita, yang kita lakukan menggunakan pernyataan berikut -

from theano import *

Daripada mengimpor paket individu, kami telah menggunakan * dalam pernyataan di atas untuk menyertakan semua paket dari pustaka Theano.

Mendeklarasikan Variabel

Selanjutnya, kami akan mendeklarasikan variabel yang disebut a menggunakan pernyataan berikut -

a = tensor.dscalar()

Itu dscalarmetode mendeklarasikan variabel skalar desimal. Eksekusi pernyataan di atas menciptakan variabel yang disebutadalam kode program Anda. Demikian juga, kami akan membuat variabelb menggunakan pernyataan berikut -

b = tensor.dscalar()

Mendefinisikan Ekspresi

Selanjutnya, kami akan menentukan ekspresi kami yang beroperasi pada dua variabel ini a dan b.

c = a + b

Di Theano, eksekusi pernyataan di atas tidak melakukan penambahan skalar dari kedua variabel a dan b.

Mendefinisikan Fungsi Theano

Untuk mengevaluasi ekspresi di atas, kita perlu mendefinisikan sebuah fungsi di Theano sebagai berikut -

f = theano.function([a,b], c)

Fungsinya functionmengambil dua argumen, argumen pertama adalah masukan ke fungsi dan yang kedua adalah keluarannya. Deklarasi di atas menyatakan bahwa argumen pertama bertipe array yang terdiri dari dua elemena dan b. Outputnya disebut unit skalarc. Fungsi ini akan direferensikan dengan nama variabelf dalam kode kami selanjutnya.

Memanggil Fungsi Theano

Panggilan ke fungsi f dilakukan menggunakan pernyataan berikut -

d = f(3.5, 5.5)

Masukan ke fungsi adalah larik yang terdiri dari dua skalar: 3.5 dan 5.5. Output dari eksekusi ditugaskan ke variabel skalard. Untuk mencetak kontend, kami akan menggunakan print pernyataan -

print (d)

Eksekusi akan menyebabkan nilai d untuk dicetak di konsol, yaitu 9.0 dalam kasus ini.

Daftar Program Lengkap

Daftar program lengkap diberikan di sini untuk referensi cepat Anda -

from theano import *
a = tensor.dscalar()
b = tensor.dscalar()
c = a + b
f = theano.function([a,b], c)
d = f(3.5, 5.5)
print (d)

Jalankan kode di atas dan Anda akan melihat hasilnya sebagai 9.0. Tangkapan layar ditampilkan di sini -

Sekarang, mari kita bahas contoh yang sedikit lebih kompleks yang menghitung perkalian dua matriks.

Kami akan menghitung produk titik dari dua matriks. Matriks pertama berdimensi 2 x 3 dan yang kedua berdimensi 3 x 2. Matriks yang kita gunakan sebagai input dan hasil perkaliannya dinyatakan di sini -

$$ \ begin {bmatrix} 0 & -1 & 2 \\ 4 & 11 & 2 \ end {bmatrix} \: \ begin {bmatrix} 3 & -1 \\ 1 & 2 \\ 35 & 20 \ end {bmatrix} = \ begin {bmatrix} 11 & 0 \\ 35 & 20 \ end {bmatrix} $$

Mendeklarasikan Variabel

Untuk menulis ekspresi Theano di atas, pertama-tama kita mendeklarasikan dua variabel untuk mewakili matriks kita sebagai berikut -

a = tensor.dmatrix()
b = tensor.dmatrix()

Matriks adalah Jenis matriks untuk ganda. Perhatikan bahwa kami tidak menentukan ukuran matriks di mana pun. Dengan demikian, variabel ini dapat mewakili matriks dari dimensi apa pun.

Mendefinisikan Ekspresi

Untuk menghitung perkalian titik, kami menggunakan fungsi bawaan yang disebut dot sebagai berikut -

c = tensor.dot(a,b)

Output perkalian ditugaskan ke variabel matriks yang disebut c.

Mendefinisikan Fungsi Theano

Selanjutnya, kami mendefinisikan fungsi seperti pada contoh sebelumnya untuk mengevaluasi ekspresi.

f = theano.function([a,b], c)

Perhatikan bahwa input ke fungsi adalah dua variabel a dan b yang berjenis matriks. Output fungsi ditugaskan ke variabelc yang secara otomatis akan menjadi tipe matriks.

Memanggil Fungsi Theano

Kami sekarang memanggil fungsi menggunakan pernyataan berikut -

d = f([[0, -1, 2], [4, 11, 2]], [[3, -1],[1,2], [6,1]])

Dua variabel dalam pernyataan di atas adalah array NumPy. Anda dapat secara eksplisit mendefinisikan array NumPy seperti yang ditunjukkan di sini -

f(numpy.array([[0, -1, 2], [4, 11, 2]]),
numpy.array([[3, -1],[1,2], [6,1]]))

Setelah d dihitung kita mencetak nilainya -

print (d)

Anda akan melihat output berikut pada output -

[[11. 0.]
[25. 20.]]

Daftar Program Lengkap

The complete program listing is given here:
from theano import *
a = tensor.dmatrix()
b = tensor.dmatrix()
c = tensor.dot(a,b)
f = theano.function([a,b], c)
d = f([[0, -1, 2],[4, 11, 2]], [[3, -1],[1,2],[6,1]])
print (d)

Tangkapan layar dari eksekusi program ditampilkan di sini -

Dari dua contoh di atas, Anda mungkin telah memperhatikan bahwa di Theano kami membuat ekspresi yang akhirnya dievaluasi menggunakan Theano function. Theano menggunakan teknik pengoptimalan lanjutan untuk mengoptimalkan eksekusi ekspresi. Untuk memvisualisasikan grafik komputasi, Theano menyediakan aprinting paket di perpustakaannya.

Grafik Simbolik untuk Penambahan Skalar

Untuk melihat grafik komputasi program penambahan skalar kami, gunakan perpustakaan pencetakan sebagai berikut -

theano.printing.pydotprint(f, outfile="scalar_addition.png", var_with_name_simple=True)

Ketika Anda menjalankan pernyataan ini, sebuah file bernama scalar_addition.pngakan dibuat di mesin Anda. Grafik komputasi yang disimpan ditampilkan di sini untuk referensi cepat Anda -

Daftar program lengkap untuk menghasilkan gambar di atas diberikan di bawah ini -

from theano import *
a = tensor.dscalar()
b = tensor.dscalar()
c = a + b
f = theano.function([a,b], c)
theano.printing.pydotprint(f, outfile="scalar_addition.png", var_with_name_simple=True)

Grafik Simbolik untuk Pengganda Matriks

Sekarang, coba buat grafik komputasi untuk pengganda matriks kita. Daftar lengkap untuk menghasilkan grafik ini diberikan di bawah ini -

from theano import *
a = tensor.dmatrix()
b = tensor.dmatrix()
c = tensor.dot(a,b)
f = theano.function([a,b], c)
theano.printing.pydotprint(f, outfile="matrix_dot_product.png", var_with_name_simple=True)

Grafik yang dihasilkan ditampilkan di sini -

Grafik Kompleks

Dalam ekspresi yang lebih besar, grafik komputasi bisa menjadi sangat kompleks. Salah satu grafik yang diambil dari dokumentasi Theano ditampilkan di sini -

Untuk memahami cara kerja Theano, pertama-tama penting untuk mengetahui pentingnya grafik komputasi ini. Dengan pemahaman ini, kita akan mengetahui pentingnya Theano.

Mengapa Theano?

Dengan melihat kompleksitas grafik komputasi, Anda sekarang dapat memahami tujuan di balik pengembangan Theano. Kompiler tipikal akan memberikan pengoptimalan lokal dalam program karena tidak pernah melihat keseluruhan komputasi sebagai satu unit.

Theano menerapkan teknik pengoptimalan yang sangat canggih untuk mengoptimalkan grafik komputasi secara penuh. Ini menggabungkan aspek Aljabar dengan aspek penyusun yang mengoptimalkan. Sebagian dari grafik dapat dikompilasi menjadi kode bahasa C. Untuk kalkulasi berulang, kecepatan evaluasi sangat penting dan Theano memenuhi tujuan ini dengan menghasilkan kode yang sangat efisien.

Sekarang, setelah Anda memahami dasar-dasar Theano, mari kita mulai dengan tipe data berbeda yang tersedia bagi Anda untuk membuat ekspresi Anda. Tabel berikut memberi Anda daftar parsial tipe data yang ditentukan di Theano.

Tipe data Tipe Theano
Byte

bscalar, bvector, bmatrix, alis, bcol, btensor3, btensor4, btensor5, btensor6, btensor7

Bilangan bulat 16-bit

wscalar, wvector, wmatrix, wrow, wcol, wtensor3, wtensor4, wtensor5, wtensor6, wtensor7

Bilangan bulat 32-bit

iscalar, ivector, imatrix, irow, icol, itensor3, itensor4, itensor5, itensor6, itensor7

Bilangan bulat 64-bit

lscalar, lvector, lmatrix, lrow, lcol, ltensor3, ltensor4, ltensor5, ltensor6, ltensor7

mengapung

fscalar, fvector, fmatrix, frow, fcol, ftensor3, ftensor4, ftensor5, ftensor6, ftensor7

dua kali lipat

dscalar, dvector, dmatrix, drow, dcol, dtensor3, dtensor4, dtensor5, dtensor6, dtensor7

kompleks

cscalar, cvector, cmatrix, gagak, ccol, ctensor3, ctensor4, ctensor5, ctensor6, ctensor7

Daftar di atas tidak lengkap dan pembaca dirujuk ke dokumen pembuatan tensor untuk daftar lengkapnya.

Sekarang saya akan memberi Anda beberapa contoh cara membuat variabel dari berbagai jenis data di Theano.

Skalar

Untuk membuat variabel skalar, Anda akan menggunakan sintaks -

Sintaksis

x = theano.tensor.scalar ('x')
x = 5.0
print (x)

Keluaran

5.0

Array Satu Dimensi

Untuk membuat array satu dimensi, gunakan deklarasi berikut -

Contoh

f = theano.tensor.vector
f = (2.0, 5.0, 3.0)
print (f)f = theano.tensor.vector
f = (2.0, 5.0, 3.0)
print (f)
print (f[0])
print (f[2])

Keluaran

(2.0, 5.0, 3.0)
2.0
3.0

Jika kamu melakukan f[3] itu akan menghasilkan kesalahan indeks di luar jangkauan seperti yang ditunjukkan di sini -

print f([3])

Keluaran

IndexError                          Traceback (most recent call last)
<ipython-input-13-2a9c2a643c3a> in <module>
   4 print (f[0])
   5 print (f[2])
----> 6 print (f[3])
IndexError: tuple index out of range

Array Dua Dimensi

Untuk mendeklarasikan array dua dimensi, Anda akan menggunakan potongan kode berikut -

Contoh

m = theano.tensor.matrix
m = ([2,3], [4,5], [2,4])
print (m[0])
print (m[1][0])

Keluaran

[2, 3]
4

Array 5-dimensi

Untuk mendeklarasikan array 5 dimensi, gunakan sintaks berikut -

Contoh

m5 = theano.tensor.tensor5
m5 = ([0,1,2,3,4], [5,6,7,8,9], [10,11,12,13,14])
print (m5[1])
print (m5[2][3])

Keluaran

[5, 6, 7, 8, 9]
13

Anda dapat mendeklarasikan array 3 dimensi dengan menggunakan tipe data tensor3 di tempat tensor5, larik 4 dimensi menggunakan tipe data tensor4, dan seterusnya hingga tensor7.

Konstruktor Jamak

Terkadang, Anda mungkin ingin membuat variabel dengan tipe yang sama dalam satu deklarasi. Anda dapat melakukannya dengan menggunakan sintaks berikut -

Sintaksis

from theano.tensor import * x, y, z = dmatrices('x', 'y', 'z') 
x = ([1,2],[3,4],[5,6]) 
y = ([7,8],[9,10],[11,12]) 
z = ([13,14],[15,16],[17,18]) 
print (x[2]) 
print (y[1]) 
print (z[0])

Keluaran

[5, 6] 
[9, 10] 
[13, 14]

Pada bab sebelumnya, saat membahas tipe data, kami membuat dan menggunakan variabel Theano. Untuk mengulangi, kami akan menggunakan sintaks berikut untuk membuat variabel di Theano -

x = theano.tensor.fvector('x')

Dalam pernyataan ini, kami telah membuat variabel xdari jenis vektor yang berisi float 32-bit. Kami juga menamakannya sebagaix. Nama-nama tersebut biasanya berguna untuk debugging.

Untuk mendeklarasikan vektor bilangan bulat 32-bit, Anda akan menggunakan sintaks berikut -

i32 = theano.tensor.ivector

Di sini, kami tidak menentukan nama untuk variabel tersebut.

Untuk mendeklarasikan vektor tiga dimensi yang terdiri dari float 64-bit, Anda akan menggunakan deklarasi berikut -

f64 = theano.tensor.dtensor3

Berbagai jenis konstruktor beserta tipe datanya tercantum dalam tabel di bawah ini -

Pembuat Tipe data Ukuran
fvector float32 1
ivector int32 1
fscalar.dll float32 0
fmatrix.dll float32 2
ftensor3 float32 3
dtensor3 float64 3

Anda dapat menggunakan konstruktor vektor generik dan menentukan tipe data secara eksplisit sebagai berikut -

x = theano.tensor.vector ('x', dtype=int32)

Di bab selanjutnya, kita akan mempelajari cara membuat variabel bersama.

Seringkali, Anda perlu membuat variabel yang dibagi antara fungsi yang berbeda dan juga di antara beberapa panggilan ke fungsi yang sama. Sebagai contoh, saat melatih jaringan neural, Anda membuat vektor bobot untuk menetapkan bobot ke setiap fitur yang dipertimbangkan. Vektor ini dimodifikasi pada setiap iterasi selama pelatihan jaringan. Jadi, itu harus dapat diakses secara global melalui beberapa panggilan ke fungsi yang sama. Jadi kami membuat variabel bersama untuk tujuan ini. Biasanya, Theano memindahkan variabel bersama tersebut ke GPU, asalkan tersedia. Ini mempercepat komputasi.

Sintaksis

Anda membuat variabel bersama Anda menggunakan sintaks berikut -

import numpy
W = theano.shared(numpy.asarray([0.1, 0.25, 0.15, 0.3]), 'W')

Contoh

Di sini dibuat array NumPy yang terdiri dari empat bilangan floating point. Untuk mengatur / mendapatkan fileW nilai Anda akan menggunakan potongan kode berikut -

import numpy
W = theano.shared(numpy.asarray([0.1, 0.25, 0.15, 0.3]), 'W')
print ("Original: ", W.get_value())
print ("Setting new values (0.5, 0.2, 0.4, 0.2)")
W.set_value([0.5, 0.2, 0.4, 0.2])
print ("After modifications:", W.get_value())

Keluaran

Original: [0.1 0.25 0.15 0.3 ]
Setting new values (0.5, 0.2, 0.4, 0.2)
After modifications: [0.5 0.2 0.4 0.2]

Theano functionbertindak seperti pengait untuk berinteraksi dengan grafik simbolik. Grafik simbolik dikompilasi menjadi kode eksekusi yang sangat efisien. Ini mencapai ini dengan merestrukturisasi persamaan matematika untuk membuatnya lebih cepat. Ini mengkompilasi beberapa bagian ekspresi ke dalam kode bahasa C. Ini memindahkan beberapa tensor ke GPU, dan seterusnya.

Kode terkompilasi yang efisien sekarang diberikan sebagai masukan ke Theano function. Saat Anda menjalankan Theanofunction, ini memberikan hasil komputasi ke variabel yang ditentukan oleh kami. Jenis pengoptimalan dapat ditentukan sebagai FAST_COMPILE atau FAST_RUN. Ini ditentukan dalam variabel lingkungan THEANO_FLAGS.

A Theano function dideklarasikan menggunakan sintaks berikut -

f = theano.function ([x], y)

Parameter pertama [x] adalah daftar variabel input dan parameter kedua y adalah daftar variabel keluaran.

Setelah memahami dasar-dasar Theano, mari kita mulai pengkodean Theano dengan contoh yang sepele.

Theano sangat berguna dalam melatih jaringan saraf di mana kita harus menghitung biaya berulang kali, dan gradien untuk mencapai yang optimal. Pada kumpulan data besar, ini menjadi intensif secara komputasi. Theano melakukan ini secara efisien karena pengoptimalan internalnya dari grafik komputasi yang telah kita lihat sebelumnya.

Pernyataan masalah

Sekarang kita akan belajar bagaimana menggunakan perpustakaan Theano untuk melatih jaringan. Kami akan mengambil kasus sederhana di mana kami mulai dengan empat set data fitur. Kami menghitung jumlah fitur ini setelah menerapkan bobot tertentu (kepentingan) untuk setiap fitur.

Sasaran dari pelatihan ini adalah untuk mengubah bobot yang ditetapkan ke setiap fitur sehingga jumlahnya mencapai nilai target 100.

sum = f1 * w1 + f2 * w2 + f3 * w3 + f4 * w4

Dimana f1, f2, ... adalah nilai fitur dan w1, w2, ... adalah bobotnya.

Izinkan saya mengukur contoh untuk pemahaman yang lebih baik tentang pernyataan masalah. Kami akan mengasumsikan nilai awal 1.0 untuk setiap fitur dan kami akan mengambil w1 sama dengan0.1, w2 sama 0.25, w3 sama 0.15, dan w4 sama 0.3. Tidak ada logika yang pasti dalam menetapkan nilai bobot, itu hanya intuisi kita. Jadi, jumlah awalnya adalah sebagai berikut -

sum = 1.0 * 0.1 + 1.0 * 0.25 + 1.0 * 0.15 + 1.0 * 0.3

Jumlah yang mana 0.8. Sekarang, kita akan terus memodifikasi penetapan bobot sehingga jumlah ini mendekati 100. Nilai resultan saat ini dari0.8 jauh dari nilai target 100 yang kami inginkan. Dalam istilah Machine Learning, kami mendefinisikan costsebagai perbedaan antara nilai target dikurangi nilai keluaran saat ini, biasanya dikuadratkan untuk meledakkan kesalahan. Kami mengurangi biaya ini di setiap iterasi dengan menghitung gradien dan memperbarui vektor bobot kami.

Mari kita lihat bagaimana seluruh logika ini diterapkan di Theano.

Mendeklarasikan Variabel

Pertama-tama kita mendeklarasikan vektor input x sebagai berikut -

x = tensor.fvector('x')

Dimana x adalah larik dimensi tunggal dari nilai float.

Kami mendefinisikan skalar target variabel seperti yang diberikan di bawah ini -

target = tensor.fscalar('target')

Selanjutnya, kami membuat tensor bobot W dengan nilai awal seperti yang dibahas di atas -

W = theano.shared(numpy.asarray([0.1, 0.25, 0.15, 0.3]), 'W')

Mendefinisikan Ekspresi Theano

Kami sekarang menghitung output menggunakan ekspresi berikut -

y = (x * W).sum()

Perhatikan bahwa dalam pernyataan di atas x dan Wadalah vektor dan bukan variabel skalar sederhana. Kami sekarang menghitung kesalahan (biaya) dengan ekspresi berikut -

cost = tensor.sqr(target - y)

Biaya adalah selisih antara nilai target dan keluaran saat ini, dikuadratkan.

Untuk menghitung gradien yang memberitahu kita seberapa jauh kita dari target, kita menggunakan built-in grad metode sebagai berikut -

gradients = tensor.grad(cost, [W])

Kami sekarang memperbarui weights vektor dengan mengambil kecepatan pemelajaran 0.1 sebagai berikut -

W_updated = W - (0.1 * gradients[0])

Selanjutnya, kita perlu memperbarui vektor bobot kita menggunakan nilai di atas. Kami melakukan ini dalam pernyataan berikut -

updates = [(W, W_updated)]

Mendefinisikan / Memanggil Fungsi Theano

Terakhir, kami mendefinisikan file function di Theano untuk menghitung jumlahnya.

f = function([x, target], y, updates=updates)

Untuk memanggil fungsi di atas beberapa kali, kami membuat for loop sebagai berikut -

for i in range(10):
output = f([1.0, 1.0, 1.0, 1.0], 100.0)

Seperti yang dikatakan sebelumnya, input ke fungsi adalah vektor yang berisi nilai awal untuk empat fitur - kami menetapkan nilainya 1.0ke setiap fitur tanpa alasan khusus. Anda dapat menetapkan nilai yang berbeda dari pilihan Anda dan memeriksa apakah fungsi tersebut akhirnya menyatu. Kami akan mencetak nilai vektor bobot dan keluaran yang sesuai di setiap iterasi. Itu ditunjukkan pada kode di bawah ini -

print ("iteration: ", i)
print ("Modified Weights: ", W.get_value())
print ("Output: ", output)

Daftar Program Lengkap

Daftar program lengkap direproduksi di sini untuk referensi cepat Anda -

from theano import *
import numpy

x = tensor.fvector('x')
target = tensor.fscalar('target')

W = theano.shared(numpy.asarray([0.1, 0.25, 0.15, 0.3]), 'W')
print ("Weights: ", W.get_value())

y = (x * W).sum()
cost = tensor.sqr(target - y)
gradients = tensor.grad(cost, [W])
W_updated = W - (0.1 * gradients[0])
updates = [(W, W_updated)]

f = function([x, target], y, updates=updates)
for i in range(10):
   output = f([1.0, 1.0, 1.0, 1.0], 100.0)
   print ("iteration: ", i)
   print ("Modified Weights: ", W.get_value())
   print ("Output: ", output)

Saat Anda menjalankan program, Anda akan melihat output berikut -

Weights: [0.1 0.25 0.15 0.3 ]
iteration: 0
Modified Weights: [19.94 20.09 19.99 20.14]
Output: 0.8
iteration: 1
Modified Weights: [23.908 24.058 23.958 24.108]
Output: 80.16000000000001
iteration: 2
Modified Weights: [24.7016 24.8516 24.7516 24.9016]
Output: 96.03200000000001
iteration: 3
Modified Weights: [24.86032 25.01032 24.91032 25.06032]
Output: 99.2064
iteration: 4
Modified Weights: [24.892064 25.042064 24.942064 25.092064]
Output: 99.84128
iteration: 5
Modified Weights: [24.8984128 25.0484128 24.9484128 25.0984128]
Output: 99.968256
iteration: 6
Modified Weights: [24.89968256 25.04968256 24.94968256 25.09968256]
Output: 99.9936512
iteration: 7
Modified Weights: [24.89993651 25.04993651 24.94993651 25.09993651]
Output: 99.99873024
iteration: 8
Modified Weights: [24.8999873 25.0499873 24.9499873 25.0999873]
Output: 99.99974604799999
iteration: 9
Modified Weights: [24.89999746 25.04999746 24.94999746 25.09999746]
Output: 99.99994920960002

Perhatikan bahwa setelah empat iterasi, hasilnya adalah 99.96 dan setelah lima iterasi, selesai 99.99, yang mendekati target yang kami inginkan 100.0.

Bergantung pada akurasi yang diinginkan, Anda dapat dengan aman menyimpulkan bahwa jaringan dilatih dalam 4 hingga 5 iterasi. Setelah pelatihan selesai, cari vektor bobot, yang setelah 5 iterasi mengambil nilai berikut -

iteration: 5
Modified Weights: [24.8984128 25.0484128 24.9484128 25.0984128]

Anda sekarang dapat menggunakan nilai-nilai ini di jaringan Anda untuk menerapkan model.

Pembuatan model Machine Learning melibatkan komputasi intensif dan berulang yang melibatkan tensor. Ini membutuhkan sumber daya komputasi yang intensif. Karena kompilator biasa akan memberikan pengoptimalan di tingkat lokal, biasanya kompiler tersebut tidak menghasilkan kode eksekusi cepat.

Theano pertama-tama membuat grafik komputasi untuk seluruh komputasi. Karena keseluruhan gambar komputasi tersedia sebagai gambar tunggal selama kompilasi, beberapa teknik pengoptimalan dapat diterapkan selama pra-kompilasi dan itulah yang sebenarnya dilakukan Theano. Ini merestrukturisasi grafik komputasi, sebagian mengubahnya menjadi C, memindahkan variabel bersama ke GPU, dan seterusnya untuk menghasilkan kode yang dapat dieksekusi dengan sangat cepat. Kode yang dikompilasi kemudian dieksekusi oleh Theanofunctionyang hanya bertindak sebagai pengait untuk memasukkan kode yang dikompilasi ke dalam runtime. Theano telah membuktikan mandatnya dan diterima secara luas di bidang akademis dan industri.