simple ann (multilayer perceptron) dengan...

29
Simple ANN (Multilayer Perceptron) dengan “Keras” Alfan F. Wicaksono Fakultas Ilmu Komputer Universitas Indonesia

Upload: vuongnga

Post on 02-Mar-2019

231 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Simple ANN (Multilayer Perceptron) dengan “Keras”

Alfan F. Wicaksono

Fakultas Ilmu Komputer

Universitas Indonesia

Page 2: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Disclaimer

• Ini bukan tutorial untuk mempelajari ANN & Deep Learning secara detail.

• Tujuan tutorial ini adalah memahami “kulit” dari ANN dan bisa menggunakan tool “Keras” untuk mengaplikasikannya.

Page 3: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Tips

Jika memang ingin mendalami Deep Learning dan bisa mengikutitutorial Deep Learning yang tersedia, tahap awal adalahmemahami dengan baik 5 topik berikut:

• Optimasi dengan gradient descent/ascent & algoritma lain

• Linear Regression

• Logistic Regression

• Multilayer Neural Networks

• Konsep Backpropagation

Page 4: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Tools

• https://keras.io/

– Sebuah tool untuk membangun arsitektur deep learning dengan cukup mudah.

Page 5: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Logistic Regression

Berbeda dengan Linear Regression, Logistic Regressiondigunakan untuk permasalahan Binary Classification. Jadi outputyang dihasilkan adalah diskrit ! (1 atau 0), (ya atau tidak).

Misal, diberikan 2 hal:

1. Unseen data x yang ingin diprediksi labelnya, yaitu y.

2. Model logistic regression dengan parameter θ0, θ1, …, θn

yang sudah ditentukan.

9 September 2016 5

z

n

i

iinn

ez

xyPxyP

xxxxyP

1

1)(

);|1(1);|0(

)()...();|1(1

0110

Page 6: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Logistic Regression

Bisa digambarkan dalam bentuk “single neuron”.

9 September 2016 6

z

n

i

iinn

ez

xyPxyP

xxxxyP

1

1)(

);|1(1);|0(

)()...();|1(1

0110

x1

x2

x3

+1

θ1

θ2

θ3

θ0

Dengan fungsi sigmoid sebagai activation function

How to learn the parameters ?

Page 7: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Logistic Regression

Merupakan sebuah Linear Model ! Garis pemisah adalah garislurus !

9 September 2016 7

A non-linearly separable data

Page 8: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Logistic Regression

Merupakan sebuah Linear Model ! Garis pemisah adalah garislurus !

9 September 2016 8

Cocok untuk data di bawah ??

Page 9: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Neural Network: Non-Linear Model

Page 10: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Multilayer Neural Network (Multilayer Perceptron)

Misal, ada 3-layer NN, dengan 3 input unit, 2 hidden unit, dan 2output unit.

9 September 2016 10

x1

x2

x3

+1

+1

𝑊11(1)

𝑊21(1)

𝑊12(1)

𝑊22(1)

𝑊13(1)

𝑊23(1)

𝑏1(1) 𝑏2

(1)

𝑊11(2)

𝑊12(2)

𝑊21(2)

𝑊22(2)

𝑏1(2) 𝑏2

(2)

W(1), W(2), b(1), b(2) adalah parameter !

Page 11: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Multilayer Neural Network, Cara Melakukan Prediksi

Misal, untuk activation function, kita gunakan fungsi hyperbolictangent.

Untuk menghitung output di hidden layer:

9 September 2016 11

)tanh()( xxf

)1(

23

)1(

232

)1(

221

)1(

21

)2(

2

)1(

13

)1(

132

)1(

121

)1(

11

)2(

1

bxWxWxWz

bxWxWxWz

)(

)(

)2(

2

)2(

2

)2(

1

)2(

1

zfa

zfa

Ini hanyalah perkalian matrix !

)1(

2

)1(

1

3

2

1

)1(

23

)1(

22

)1(

21

)1(

13

)1(

12

)1(

11)1()1()2(

b

b

x

x

x

WWW

WWWbxWz

Page 12: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Multilayer Neural Network, Cara Melakukan Prediksi

Jadi, Proses feed-forward secara keseluruhan hinggamenghasilkan output di kedua output unit adalah:

9 September 2016 12

)(ax )(

)(

)3()3(

,

)2()2()2()3(

)2()2(

)1()1()2(

zsoftmaxh

baWz

zfa

bxWz

bW

Learning Parameters? See Backpropagation Algorithm !

Page 13: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

ANN dengan Keras

Misal, ini fully-connected

Input: 779 unit

256 unit

64 unitOutput: 10 unit

Page 14: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

ANN dengan Keras Sequential API

from keras.models import Sequential

from keras.layers import Dense, Activation

model = Sequential()

model.add(Dense(output_dim=256, input_dim=779))

model.add(Activation("relu"))

model.add(Dense(output_dim=64))

model.add(Activation("relu"))

model.add(Dense(output_dim=10))

model.add(Activation("softmax"))

Dense Layer

Dense Layer

Dense Layer

(num_samples, 779)

(num_samples, 256)

(num_samples, 64)

(num_samples, 10)

Page 15: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Kompilasi Model

from keras.optimizers import SGD

model.compile(loss='categorical_crossentropy', \

optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True), \

metrics=['accuracy'])

Dalam proses estimasi parameter pada ANN, kita perlu loss-function. Tujuanestimasi parameter melalui data adalah mencari nilai parameter sehingga loss-function kita menjadi minimal.

“categorical_crossentropy” adalah loss-function yang sering digunakanseandainya ada minimal 2 output unit pada layer terakhir.

Page 16: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Gradient Descent (GD): salah satu optimizer yang digunakan

Problem: carilah nilai x sehingga fungsi f(x) = 2x4 + x3 – 3x2 mencapaititik local minimum.

Misal, kita pilih x dimulai dari x=2.0:

9 September 2016 16

Local minimum

Algoritma GD konvergen padatitik x = 0.699, yang merupakan local minimum.

Page 17: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Training/Estimasi Parameter dengan Data

model.fit(X_train, Y_train, \

nb_epoch=50, \

batch_size=32, \

verbose=1, \

validation_data=(X_test, Y_test))

EPOCH: banyaknya iterasi yang dilakukan oleh Stochastic Gradient Descent (atauOptimizer yang lain) untuk mencari parameter yang meminimalkan loss-function.

Page 18: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Evaluasi & Prediksi

#Evaluasi di testing data, menggunakan akurasi

loss_and_metrics = model.evaluate(X_test, Y_test, batch_size=32)

print (loss_and_metrics)

#Prediksi kelas dari data baru (unseen data)

classes = model.predict_classes(X_test, batch_size=32)

#Nilai probabilitas masing-masing kelas

proba = model.predict_proba(X_test, batch_size=32)

Page 19: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Apa yang perlu di-import sejauh ini?

from keras.models import Sequential

from keras.layers import Dense, Activation

from keras.optimizers import SGD

Page 20: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Data MNIST Kita

• Kita akan gunakan kembali data MNIST berformat SVMLIB yang diberikan di tutorial sebelumnya

• Perlu import beberapa tools dari Scikit-Learn & numpy:

from sklearn.datasets import load_svmlight_file

from sklearn import preprocessing

from sklearn.cross_validation import train_test_split

import numpy as np

Page 21: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

One-Hot Vector

#toOneHot(np.array([0,3,1]), n)

#convert [0,3,1] to one-hot vector -> [[1, 0, 0, 0, ...],

# [0, 0, 0, 1, ...],

# [0, 1, 0, 0, ...]]

def toOneHot(np_array1d, n_labels):

np_array1d = np_array1d.astype(int)

np_array2d = np.zeros((np_array1d.shape[0], n_labels))

np_array2d[np.arange(np_array1d.shape[0]), np_array1d] = 1

return np_array2d

Page 22: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Load Data & Preprocess

#load dataset in svmlib format

X, y = load_svmlight_file("dataset1.txt")

X = X.toarray()

y = toOneHot(y, 10) # label ada 10 di MNIST data

#scaling to [0,1]

min_max_scaler = preprocessing.MinMaxScaler()

X_scaled = min_max_scaler.fit_transform(X)

#split train-testing

X_train, X_test, Y_train, Y_test = train_test_split(X_scaled, y, test_size=0.3)

Page 23: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Dengan Keras Functional API

from keras.layers import Input, Dense

from keras.models import Model

# mengembalikan tensor

inputs = Input(shape=(779,))

# callable pada sebuah tensor, dan mengembalikan tensor

x = Dense(256, activation='relu')(inputs)

x = Dense(64, activation='relu')(x)

predictions = Dense(10, activation='softmax')(x)

# model dengan 1 Input layer dan 3 Dense layers

model = Model(input=inputs, output=predictions)

model.compile(optimizer='sgd',

loss='categorical_crossentropy',

metrics=['accuracy'])

model.fit(X_train, Y_train) # starts training

Page 24: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Belajar Sendiri …

• Keras Sequential API:– https://keras.io/getting-started/sequential-model-

guide/

• Keras Functional API:– https://keras.io/getting-started/functional-api-guide/

• Daftar layer pada keras:– https://keras.io/– [warning] Butuh belajar tentang teori Deep Learning

dahulu

Page 25: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Simpan Arsitektur Model

#save as json

json_string = model.to_json()

print(json_string)

#save as yaml

yaml_string = model.to_yaml()

print(yaml_string)

Page 26: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Rekonstruksi Model

from models import model_from_json

from models import model_from_yaml

json_string = model.to_json()

model = model_from_json(json_string)

yaml_string = model.to_yaml()

model = model_from_yaml(yaml_string)

Page 27: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Melihat Parameter/Weight Model

weights = model.get_weights()

#bisa set weights

#shape sama dengan yang dikembalikan di atas

model.set_weights(weights)

Page 28: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Visualisasi Layer

Plot graf dari model, dan menyimpan di sebuahfile citra

from keras.utils.visualize_util import plot

plot(model, to_file='model.png')

Page 29: Simple ANN (Multilayer Perceptron) dengan “Keras”ir.cs.ui.ac.id/alfan/ml/second/ML-ANN-Keras.pdf · Deep Learning secara detail. ... Dengan fungsi sigmoid sebagai activation function

Simpan & Baca Parameter Model

Harus ada modul untuk mendukung baca-tuliske file HDF5

model.save_weights('parameter_model.h5')

model.load_weights('parameter_model.h5')