Step-by-step Backpropagation Menggunakan Python

Pada artikel sebelumnya, kita telah melihat step-by-step perhitungan backpropagation. Pada artikel ini kita kan mengimplementasikan backpropagation menggunakan Python

Kita akan mengimplementasikan backpropagation berdasarkan contoh perhitungan pada artikel sebelumnya. Karenanya perlu diingat kembali arsitektur dan variabel-variabel yang kita miliki. Berikut arsitektur jaringan saraf tiruannya:

Variabel $x$ menunjukkan input dari jaringan saraf tiruan kita. Pada contoh ini kita hanya akan menerima sebuah input yang memiliki 3 fitur, yang bernilai $x_1=1.0$, $x_2=2.0$, dan $x_3=0.5 $ atau dapat kita tulis sebagai berikut:

$$ X = [1.0, 2.0, 0.5] $$

Untuk bobot jaringan, jika diperhatikan terdapat 6 bobot $w$ yang menghubungkan neuron input dengan neuron output. Untuk memudahkan penamaan, kita simbolkan $w_{ij}$ berarti bobot yang menghubungkan neuron input nomor $i$ ke neuron output nomor $j$. Penamaan ini kita ikuti dari artikel sebelumnya. Jika dituliskan dalam bentuk matriks dengan $i$ menjadi nomor baris dan $j$ menjadi nomor kolom maka tampak seperti berikut:

$$ \begin{bmatrix}
w_{11} = 0.2 & w_{12} = 0.3 \\
w_{21} = 0.3 & w_{22} = 0.1 \\
w_{31} = 0.3 & w_{32} = 0.2
\end{bmatrix} $$

atau bisa dituliskan:

$$ W = \begin{bmatrix}
0.2 & 0.3 \
0.3 & 0.1 \
0.3 & 0.2
\end{bmatrix} $$

Nilai bias b pada latihan ini kita beri nilai 0 untuk $b_1$ dan $b_2$:

$$ B = [0, 0]$$

Jangan lupa juga kita buatkan variabel $T$ yang merupakan label/target asli dari data (groundtruth) dengan nilai $t_1=0$ dan $t_2=1$ (sesuai dengan artikel sebelumnya). Nantinya hasil prediksi $Y$ dari model akan dibandingkan dengan variabel ini.

Pada proses di atas kita melakukan yang namanya vektorisasi atau mengubah representasi nilai menjadi vektor atau matriks. Nantinya ini akan memudahkan perhitungan kedepannya. Di Python proses deklarasi variabel-variabel tersebut dapat dituliskan sebagai berikut:

X = [1, 2, 0.5]
W = [[0.2, 0.3],
    [0.3, 0.1],
    [0.3, 0.2]]
b = [0, 0]
T = [0, 1]
Continue reading

Pengenalan Autoencoder : neural network untuk kompresi data

Autoencoder

Autoencoder adalah salah satu varian dari jaringan saraf tiruan (JST) yang secara umum digunakan untuk meng-“encode” suatu data. Berbeda dengan arsitektur JST pada umumnya yang dilatih untuk mengklasifikasi atau menghitung nilai regresi dari masukan, autoencoder dilatih untuk dapat menghasilkan output yang sama dengan inputnya. Autoencoder termasuk pada kategori Unsupervised Learning karena dilatih dengan menerima data tanpa label.

Traditional Neural Network vs Autoencoder

Pada ilustrasi tersebut, arsitektur di bagian atas adalah arsiktektur JST yang digunakan untuk mengklasifikasi citra bahan makanan di supermarket. Pada bagian bawah merupakan arsitektur autoencoder.

Lalu apa tujuannya sebuah model dilatih untuk menghasilkan citra yang sama?

Jika diperhatikan pada ilustrasi di atas, bagian yang menarik adalah bagian tengah autoencoder yang berupa sebuah vektor kumpulan neuron (ditandai dengan kotak warna kuning). Bagian tengah ini biasanya memiliki jumlah neuron yang lebih kecil dibanding layer di kanan atau kirinya (termasuk layer input dan outputnya). Sehingga jika model dapat dilatih dengan baik, bisa dikatakan bagian tengah ini merupakan representasi sederhana dari citra yang menjadi input. Apa maksud representasi sederhana? Karena vektor ini diperoleh dari citra input melalui arsitektur jaringan saraf tiruan (Encode), lalu dari vektor yang kecil ini bisa dibuat kembali citra yang serupa dengan inputnya (Decode).

Continue reading

Jaringan Saraf Tiruan Sederhana Menggunakan Tensorflow 2.x

Ini adalah artikel “versi lain” dari tulisan sebelumnya di sini. Sebagian besar artikel akan sama, namun pada artikel ini kita akan coba membuat jaringan saraf tiruan sederhana menggunakan Tensorflow 2.x. Tensorflow 2.x atau tensorflow versi 2, merupakan tensorflow versi terbaru yang membawa konsep yang berbeda dengan Tensorflow versi sebelumnya. Bagi yang masih bingung tentang JST dan mau memahami bagaimana JST bekerja bisa buka artikel berikut.

Dataset

Kita akan menggunakan dataset Iris yang sudah cukup populer. Dataset ini berisi data dari 150 Bunga Iris yang berasa dari 3 spesies berbeda. Diberikan 4 buah fitur / ciri, yakni panjang kelopak (sepal length), lebar kelopak (sepal width), panjang mahkota (petal length), dan lebar mahkota (petal width), lalu kita akan mencoba untuk mengklasifikasikan bunga tersebut adalah spesies apa.

iris set

Saya telah memisahkan dataset aslinya menjadi dua file, satu untuk training, dan satu untuk testing. File csv dataset tersebut dapat di download di sini: training set dan test set.

Implementasi Jaringan Saraf Tiruan

Arsitektur

Melihat dataset yang ada, dapat kita simpulkan untuk arsitektur jaringan saraf tiruan kita membutuhkan 4 buah neuron input (fitur) dan 3 buah neuron output (spesies). Kita akan coba menggunakan sebuah hidden layer dengan jumlah neuron hidden layer sebanyak 3. Ilustrasinya tampak sebagai berikut:

Continue reading

Implementasi Jaringan Saraf Tiruan menggunakan PyTorch

Pada artikel ini kita akan coba melakukan implementasi Jaringan Saraf Tiruan / JST / Artificial Neural Network untuk kasus klasifikasi menggunakan PyTorch. Bagi yang belum tahu PyTorch bisa membaca artikel sebelumnya di sini atau bagi yang mau memahami bagaimana JST bekerja bisa buka artikel berikut.

Dataset

Kita akan menggunakan dataset Iris yang sudah cukup populer. Dataset ini berisi data dari 150 Bunga Iris yang berasa dari 3 spesies berbeda. Diberikan 4 buah fitur / ciri, yakni panjang kelopak (sepal length), lebar kelopak (sepal width), panjang mahkota (petal length), dan lebar mahkota (petal width), lalu kita akan mencoba untuk mengklasifikasikan bunga tersebut adalah spesies apa.

iris set

Saya telah memisahkan dataset aslinya menjadi dua file, satu untuk training, dan satu untuk testing. File csv dataset tersebut dapat di download di sini: training set dan test set.

Implementasi Jaringan Saraf Tiruan

Arsitektur

Melihat dataset yang ada, dapat kita simpulkan untuk arsitektur jaringan saraf tiruan kita membutuhkan 4 buah neuron input (fitur) dan 3 buah neuron output (spesies). Kita akan coba menggunakan sebuah hidden layer dengan jumlah neuron hidden layer sebanyak 3. Ilustrasinya tampak sebagai berikut:

Continue reading
implementasi jaringan saraf tiruan

Implementasi Jaringan Saraf Tiruan Dalam 4 Baris Kode

Perhatikan kode implementasi jaringan saraf tiruan di bawah:

from sklearn.neural_network import MLPClassifier

mlp = MLPClassifier(hidden_layer_sizes=(10),solver='sgd',
                      learning_rate_init=0.01,max_iter=500)

mlp.fit(X_train, y_train)

print mlp.score(X_test,y_test)

Yups, Implementasi Jaringan Saraf Tiruan kini tidaklah sulit lagi. Cukup dengan empat baris di atas kita telah membuat melatih dan mengevaluasi jaringan saraf tiruan yang memiliki sebuah hidden layer (Multi Layer Perceptron)

Scikit-learn merilis fitur `MLPClassifier` ini sejak di versi 0.18. Saya salah seorang yang termasuk menunggu fitur ini rilis saat itu. Karena sebelumnya, untuk implementasi jaringan saraf tiruan, saya harus coding dari scratch. Meskipun ini hanya sebuah fungsi library, tapi menurut saya fungsi ini sudah cukup bagus untuk kasus-kasus sederhana.

Continue reading