Akhir-akhir ini kayaknya aku tertarik untuk menjajal kembali machine learning setelah hampir setahun lebih nggak pernah mempelajarinya lagi. Tesis pun nggak berkaitan dengan machine learning, cuman aggregating data dari Learning Management System saja. Dalam tulisan ini, saya akan mencoba berbagi cara melakukan instalasi TensorFlow (sebuah pustaka Python yang cukup hits untuk melakukan aktivitas ML a.k.a Machine Learning dan pernah digunakan oleh teteh Kristen Steward dalam papernya di Arxiv) dan menjajalnya dengan membuat model machine learning sederhana menggunakan linear regression.
Tapi sebelum kita maju ke pembahasan selanjutnya, aku akan jelaskan dulu apa yang dimaksud dengan machine learning secara singkat. Machine learning adalah salah satu bagian dari ilmu komputer yang Arthur Samuel (1959) definisikan sebagai “field of study that gives computers the ability to learn without being explicitly programmed” atau memberikan komputer kemampuan untuk belajar sendiri tanpa secara eksplisit diprogramkan. Komputer akan mempelajari pola/pattern dari sekumpulan data dan menghasilkan sebuah model yang akan digunakan untuk melakukan aktivitas data driven prediction or decision. Pembahasan masalah machine learning tidak akan saya bahas dalam tulisan ini, tapi mungkin dalam tulisan-tulisan mendatang.
Kita langsung saja ke cara melakukan instalasi TensorFlow. Dalam kasus ini saya menggunakan MacOS, tapi secara umum langkah-langkah yang dilakukan dalam instalasi sama saja dengan langkah instalasi di OS lain. Eh, dan saya menggunakan Virtualenv untuk instalasi, karena kalau gagal install ya tinggal hapus saja folder virtualenvnya kemudian bikin yang baru lagi ._. Selain itu, dengan menggunakan Virtualenv kita tidak melakukan instalasi tensorflow di seluruh sistem OS, tapi hanya di folder tertentu saja yang sudah kita tentukan.
Penjelasan tentang kenapa sebaiknya pakai Virtualenv bisa baca disini.
INSTALASI
Oke, kita mulai:
- Pastikan kita sudah melakukan instalasi Python di komputer dan sudah melakukan instalasi pip. Googling aja ya caranya gimana. Kalau pakai MacOS tinggal ketikkan
sudo easy_install pip
- Dengan menggunakan pip, install virtualenv dengan command berikut
sudo pip install --upgrade virtualenv
- Buat folder virtualenv dengan nama “tensorflow” atau terserah sesuai selera, lalu ketikkan command:
virtualenv folderYangDiinginkan
- Aktifkan virtualenv dengan menggunakan command
source lokasifolder/bin/activate
Setelah menjalankan command diatas, bash anda akan berubah menjadi seperti ini:
(nama folder virtualenv)$
- Selanjutnya lakukan instalasi Tensorflow dengan command berikut:
pip install --upgrade tensorflow
Ini cuplikan command yang saya masukkan di terminal dan resultnya:
And ulala, TensorFlow telah terinstall didalam virtualenv anda.
Jajal TensorFlow edisi pertama: Nyobain Linear Regression
Oke, berarti sekarang kita buat kode program pertama kita, dalam Python, untuk melakukan Linear Regression sederhana. Untuk memulainya, buatlah sebuah file python dengan nama sesuai dengan keinginan anda. Sebagai contoh saya akan membuat file dengan nama “LinearRegression.py”.
Di baris pertama, pastikan anda mengimport pustaka TensorFlow.
import tensorflow as tf
Secara umum model linear regression diformulasikan dengan bentuk: Wx + b dengan W (bobot) dan b adalah variabel/parameter yang akan dioptimasi dan x sebagai nilai asal. Hasil dari linear regression ini akan dibandingkan dengan nilai y yang merupakan nilai tujuan dari model ini. Maka kita dapat tuliskan sebagai berikut dalam kode program:
W = tf.Variable([.1], tf.float32) b = tf.Variable([-.1], tf.float32) x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32)
Sebagaimana linear regression pada umumnya, besar kualitas model ditentukan oleh besar loss. Semakin besar loss, maka semakin buruk model tersebut. Besar loss ditentukan oleh jumlah selisih kuadrat (sum square) antara hasil model dan nilai y yang diinginkan. Dalam kode program dapat kita tuliskan sebagai berikut.
loss = tf.reduce_sum(tf.square(linear_model - y))
Salah satu kuntji yang ada dalam machine learning adalah melakukan parameter optimization yang akan meminimalisasi error (pada kasus linear regression seperti ini). Dalam kasus ini, saya akan menggunakan Gradient Descent optimization untuk meminimalisasi loss yang diimplementasikan sebagai berikut.
optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss)
Well, saatnya melakukan machine learning. Kita siapkan data training yang akan digunakan, misalnya seperti ini:
x_train = [1,2,3,4] y_train = [2,0,-2,-4]
Dengan data training ini dan menggunakan model di awal (0.1x – 0.1), maka error square rootnya sekitar 27.34.
Variabel-variabel seperti W dan b yang tadi dibuat sebenarnya belum diinisialisasi. Untuk melakukan inisialisasi pada variable tersebut, kita dapat menggunakan global_variables_initializer sebagai berikut:
init = tf.global_variables_initializer() sess = tf.Session() sess.run(init)
Well, saatnya kita jalankan model training yang sudah kita buat diatas dalam iterasi 1000 kali dengan kode program sebagai berikut:
for i in range(1000): sess.run(train, {x:x_train, y:y_train})
Dan terakhir, kita cetak nilai parameter W, parameter b, dan besar loss setelah training dengan melakukan ini:
curr_W, curr_b, curr_loss  = sess.run([W, b, loss], {x:x_train, y:y_train}) print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
Well, kalau disusun dari atas sampai bawah, kode program yang akan dibuat adalah sebagai berikut:
import tensorflow as tf # Parameter model W = tf.Variable([.1], tf.float32) b = tf.Variable([-.1], tf.float32) # Model masukan (x) dan keluaran (y) x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32) # kalkulasi loss loss = tf.reduce_sum(tf.square(linear_model - y)) # optimizer dengan Gradient Descent optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) # data training x_train = [1,2,3,4] y_train = [2,0,-2,-4] # Perulangan training init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # reset values to wrong for i in range(1000):   sess.run(train, {x:x_train, y:y_train}) # Evaluasi hasil training curr_W, curr_b, curr_loss  = sess.run([W, b, loss], {x:x_train, y:y_train}) print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))
Dan setelah kita jalankan, didapatkan hasil sebagai berikut:
W: [-1.99999118] b: [ 3.99997377] loss: 4.58897e-10
Wow, lossnya ternyata jadi kecil sekali ya dibandingkan kondisi awal yang mencapai angka 27an.
Dan akhirnya kita mendapatkan nilai w dan b yang baru, sehingga model linear dari data training di atas dengan menggunakan 1000 iterasi dan menggunakan Gradient Descent Optimizer adalah sebagai berikut:
y = -1. 99999118 x + 3.99997377
Dalam tulisan selanjutnya, saya akan coba sharing tentang bagaimana cara menggunakan tensorflow untuk berbagai permasalahan. Dari nyoba-nyoba pakai iris data set sampai ke pemrosesan teks dengan word2vec. Mudah-mudahan gue masih minat buat nulis di blog ini hehe.
Sumber:
https://www.cims.nyu.edu/~munoz/files/ml_optimization.pdf
https://www.tensorflow.org/get_started/get_started