MANUAL BOOK
NPM 52417576
Universitas Gunadarma
2019
DAFTAR ISI
Daftar Isi............................................................................................... 1
LAMPIRAN ...............................................................................................13
1
BAB I
PENDAHULUAN
1. Latar Belakang
Convolutional Neural Network adalah salah satu metode machine
learning dari pengembangan Multi Layer Perceptron (MLP) yang didesain
untuk mengolah data dua dimensi. CNN termasuk dalam jenis Deep Neural
Network karena dalamnya tingkat jaringan dan banyak diimplementasikan
dalam data citra. CNN memiliki dua metode; yakni klasifikasi
menggunakan feedforward dan tahap pembelajaran menggunakan
backpropagation. Cara kerja CNN memiliki kesamaan pada MLP, namun
dalam CNN setiap neuron dipresentasikan dalam bentuk dua dimensi, tidak
seperti MLP yang setiap neuron hanya berukuran satu dimensi.
2. Tujuan
Pada projek ini kami memilih penenerjemahan bahasa isyarat yaitu
merupakan image processing menggunakan algoritma pembelajaran
CNN(Convolutional Neural Network).Kami memilih judul karena untuk
mempelajari image processing dengan CNN.
2
BAB II
PEMBAHASAN
1. Artificial Intelligence
Menurut Stuart J. Russel dan Peter Norvig, AI atau kecerdasan
buatan bisa dipahami sebagai sebuah perangkat komputer yang mampu
memahami lingkungan di sekitarnya, sekaligus memberikan respons yang
sesuai dengan tujuan tindakannya tersebut. Dalam hal ini, Minsky
memberikan pengertian yang hampir sama. Menurutnya, kecerdasan
buatan adalah satu ilmu yang mempelajari cara membuat komputer
melakukan atau memproduksi tindakan sama seperti yang dilakukan
manusia.
3
hal yang –dalam pandangan manusia adalah– cerdas”
– H. A. Simon (1987)
2. Neural Network
Convolutional Neural Network (CNN) adalah salah satu jenis neural
network yang biasa digunakan pada data image. CNN bisa digunakan untuk
mendeteksi dan mengenali object pada sebuah image.
Secara garis besar CNN tidak jauh beda dengan neural network
biasanya. CNN terdiri dari neuron yang memiliki weight, bias dan
activation function.
5
Gambar 3. Contoh dan arsitektur dari CNN
6
Gambar 4. Perbedaan arsitektur antara Neural Network pada umumnya dengan CNN
CNN terdiri dari berbagai lapisan yang dimana setiap lapisan memiliki
Application Program Interface (API) alias antarmuka program aplikasi sederhana.
Pada Gambar 4, CNN dengan input awal balok tiga dimensi akan
ditransformasikan menjadi output tiga dimensi dengan beberapa fungsi
diferensiasi yang memiliki atau tidak memiliki parameter. CNN membentuk
neuron-neuronnya ke dalam tiga dimensi (panjang, lebar, dan tinggi) dalam
sebuah lapisan.
1. Feature Learning
Lapisan-lapisan yang terdapat dalam Feature Learning berguna
untuk mentranslasikan suatu input menjadi menjadi features berdasarkan ciri
dari input tersebut yang berbentuk angka-angka dalam vektor. Lapisan
ekstraksi fitur ini terdiri dari Convolutional Layer dan Pooling Layer.
a. Convolutional Layer akan menghitung output dari neuron yang terhubung ke
daerah lokal dalam input, masing-masing menghitung produk titik antara
bobot mereka dan wilayah kecil yang terhubung ke dalam volume input.
b. Rectified Linear Unit (ReLU) akan menghilangkan vanishing gradient dengan
cara menerapkan fungsi aktivasi element sebagai f(x)=max(0,x) alias
aktivasi elemen akan dilakukan saat berada di ambang batas 0. Kelebihan dan
7
kekurangan dalam penggunaan ReLU :
(+) : Bisa mempercepat gradien stokastik dibandingkan dengan fungsi sigmoid /
tan h karena ReLU berbentuk linear
(+) : Tidak menggunakan operasi eksponensial seperti sigmoid/tan h, sehingga
bisa melakukan dengan pembuatan matriks aktivasi saat ambang batas berada
pada nilai 0.
(-) : ReLU bisa rapuh saat masa training dan mati karena gradien besar yang
mengalir melalui ReLU menyebabkan update bobot, sehingga neuron tidak
aktif pada datapoint lagi. Jika ini terjadi, maka gradien yang mengalir melalui
unit akan selamanya nol dari titik itu. Artinya, unit ReLU dapat mati secara
ireversibel selama pelatihan karena mereka dapat melumpuhkan data
manifold. Misalnya, Anda mungkin menemukan bahwa sebanyak 40% dari
jaringan Anda dapat “mati” (yaitu neuron yang tidak pernah aktif di seluruh
dataset pelatihan) jika tingkat pembelajaran ditetapkan terlalu tinggi. Dengan
pengaturan tingkat pembelajaran yang tepat, ini lebih jarang menjadi
masalah.
c. Pooling Layer
Pooling layer adalah lapisan yang mengurangi dimensi dari feature
map atau lebih dikenal dengan langkan untuk downsampling, sehingga
mempercepat komputasi karena parameter yang harus diupdate semakin
sedikit dan mengatasi overfitting. Pooling yang biasa digunakan adalah Max
Pooling dan Average Pooling. Max Pooling untuk menentukan nilai
maksimum tiap pergeseran filter, sementara Average Pooling akan
menentukan nilai rata-ratanya.
8
2. Classification
Lapisan ini berguna untuk mengklasifikasikan tiap neuron yang
telah diekstraksi fitur pada sebelumnya. Terdiri dari :
a. Flatten
Membentuk ulang fitur (reshape feature map) menjadi sebuah vector agar
bisa kita gunakan sebagai input dari fully-connected layer.
b. Fully-connected
Lapisan FC (yaitu terhubung sepenuhnya) akan menghitung skor kelas.
Seperti Jaringan Saraf biasa dan seperti namanya, setiap neuron dalam
lapisan ini akan terhubung ke semua angka dalam volume.
c. Softmax
Fungsi Softmax menghitung probabilitas dari setiap kelas target atas semua
kelas target yang memungkinkan dan akan membantu untuk menentukan
kelas target untuk input yang diberikan. Keuntungan utama menggunakan
Softmax adalah rentang probabilitas output dengan nilai 0 hingga 1, dan
jumlah semua probabilitas akan sama dengan satu. Jika fungsi softmax
digunakan untuk model multi-klasifikasi, dia akan mengembalikan peluang
dari masing-masing kelas dan kelas target akan memiliki probabilitas tinggi.
Softmax menggunakan eksponensial (e-power) dari nilai input yang
diberikan dan jumlah nilai eksponensial dari semua nilai dalam input. Maka
rasio eksponensial dari nilai input dan jumlah nilai eksponensial adalah
output dari fungsi softmax.
3. Library Python
a. Tensorflow
Tensorflow adalah library untuk deep learning (neural net dengan
banyak layer dan bermacam topologi) yang dikembangkan Google
dan dijadikan open source
b. OS
OS merupakan library yang digunakan untuk mengambil file pada
storage pada Python
c. Numpy
Numpy merupakan library yang bersifat fundamental untuk
komputasi scientific pada Pyhton
9
d. Matplotlib.pyplot
Matplotlib adalah library 2 dimensi pada Python yang mengolah
angka menjadi gambar yang interaktif misalnya, grafik dan tabel
e. Pandas
Pandas berfungsi untuk membaca file dari berbagai format seperti .txt, .csv, .tsv,
dan lainnya. Anggap saja Pandas adalah spreadsheet namun tidak memiliki GUI
dan punya fitur seperti SQL.
10
BAB III
1. Perancangan
Pada project perancangan kecerdasan buatan tentang Convolutional
Nueral Network, ada berbagai macam hal yang dibutuhkan, yaitu :
a. Google colab
b. Menginstal library Kaggle pada
colab
11
2. Implementasi
a. Installasi Kaggle pada colab
1. Buka Google colab
https://colab.research.google.com
2. Cari data source di Kaggle.
4.Buka link data set yang sudah ditentukan pada Kaggle klik pada lalu pilih Copy
API Command
12
LAMPIRAN
Kodingan
!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
import warnings
warnings.filterwarnings('ignore')
import os
print(os.listdir("../content"))
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from collections import Counter
data = pd.read_csv('../content/sign_mnist_train.csv')
print('Dataframe Shape:', data.shape)
data.head()
13
x = data.iloc[:, 1:].values
print("Number of images:", x.shape[0])
print("Number of pixels in each image:", x.shape[1])
y = data.iloc[:, :1].values.flatten()
print('Labels:\n', y)
print('Shape of Labels:', y.shape)
def display_images(data):
x, y = data
fig, axes = plt.subplots(3, 3)
fig.subplots_adjust(hspace = 0.5, wspace = 0.5)
for i, ax in enumerate(axes.flat):
ax.imshow(x[i].reshape(28, 28), cmap = 'binary')
ax.set_xlabel(chr(y[i] + 65))
ax.set_xticks([])
ax.set_yticks([])
plt.show()
display_images(next_batch(9, x, y))
z = dict(Counter(list(y)))
labels = z.keys()
frequencies = [z[i] for i in labels]
labels = [chr(i + 65) for i in z.keys()]
def one_hot_encode(y):
14
return np.eye(25)[y]
y_encoded = one_hot_encode(y)
print('Shape of y after encoding:', y_encoded.shape)
# Training Parameters
learning_rate = 0.001
epochs = 2000
batch_size = 128
display_step = 100
# Placeholders
X = tf.placeholder(tf.float32, shape = [None, n_input]) # Placeholder for Fea
ture Matrix
Y = tf.placeholder(tf.float32, shape = [None, n_classes]) # Placeholder for L
abels
keep_prob = tf.placeholder(tf.float32) # Placeholder for Dropout Rate
weights = {
# Weight for Convolutional Layer 1: 5x5 filter, 1 input channel, 32 outpu
t channels
'w1' : tf.Variable(tf.random_normal([5, 5, 1, 32])),
# Weight for Convolutional Layer 2: 5x5 filter, 32 input channels, 64 out
put channels
'w2' : tf.Variable(tf.random_normal([5, 5, 32, 64])),
# Weight for Fully Connected Layer 1: 49 * 64 input channels, 1024 output
channels
'w3' : tf.Variable(tf.random_normal([7 * 7 * 64, 1024])),
# Weight for Convolutional Layer 1: 1024 input channels, 25(number of cla
sses) output channels
'w4' : tf.Variable(tf.random_normal([1024, n_classes]))
}
biases = {
# Bias for Convolutional Layer 1
'b1' : tf.Variable(tf.random_normal([32])),
# Bias for Convolutional Layer 2
'b2' : tf.Variable(tf.random_normal([64])),
15
# Bias for Fully Connected Layer 1
'b3' : tf.Variable(tf.random_normal([1024])),
# Bias for Outout Layer
'b4' : tf.Variable(tf.random_normal([n_classes]))
}
16
logits = neural_network(X, weights, biases, keep_prob)
init = tf.global_variables_initializer()
plt.plot(list(range(len(cost_hist))), cost_hist)
plt.title("Change in cost")
plt.show()
plt.plot(list(range(len(acc_hist))), acc_hist)
plt.title("Change in accuracy")
plt.show()
plt.plot(list(range(len(cost_hist))), cost_hist)
plt.title("Change in cost")
plt.show()
19
plt.plot(list(range(len(acc_hist))), acc_hist)
plt.title("Change in accuracy")
plt.show()
data_test = pd.read_csv('../content/sign_mnist_test.csv')
print('Dataframe Shape:', data_test.shape)
data_test.head()
def get_prediction(img):
with tf.Session() as sess:
pred = sess.run(y_pred, feed_dict = { X : img, keep_prob : 1.0 })
img = img.reshape(28, 28)
pred = list(pred.flatten())
pred = chr(pred.index(max(pred)) + 65)
return (img, pred)
21
Penjelasan :
!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
2.Potongan skrip berikut digunakan untuk menggunakan library yang ada pada python dalam colab
import warnings
warnings.filterwarnings('ignore')
import os
print(os.listdir("../content"))
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt
from collections import Counter
data.head()
x = data.iloc[:, 1:].values
22
print("Number of images:", x.shape[0])
print("Number of pixels in each image:", x.shape[1])
y = data.iloc[:, :1].values.flatten()
print('Labels:\n', y)
print('Shape of Labels:', y.shape)
def display_images(data):
x, y = data
fig, axes = plt.subplots(3, 3)
fig.subplots_adjust(hspace = 0.5, wspace = 0.5)
for i, ax in enumerate(axes.flat):
ax.imshow(x[i].reshape(28, 28), cmap = 'binary')
ax.set_xlabel(chr(y[i] + 65))
ax.set_xticks([])
ax.set_yticks([])
plt.show()
display_images(next_batch(9, x, y))
z = dict(Counter(list(y)))
labels = z.keys()
frequencies = [z[i] for i in labels]
labels = [chr(i + 65) for i in z.keys()]
def one_hot_encode(y):
return np.eye(25)[y]
y_encoded = one_hot_encode(y)
23
print('Shape of y after encoding:', y_encoded.shape)
# Placeholders
X = tf.placeholder(tf.float32, shape = [None, n_input]) # Placeholder for Fea
ture Matrix
Y = tf.placeholder(tf.float32, shape = [None, n_classes]) # Placeholder for L
abels
keep_prob = tf.placeholder(tf.float32) # Placeholder for Dropout Rate
weights = {
# Weight for Convolutional Layer 1: 5x5 filter, 1 input channel, 32 outpu
t channels
'w1' : tf.Variable(tf.random_normal([5, 5, 1, 32])),
# Weight for Convolutional Layer 2: 5x5 filter, 32 input channels, 64 out
put channels
'w2' : tf.Variable(tf.random_normal([5, 5, 32, 64])),
# Weight for Fully Connected Layer 1: 49 * 64 input channels, 1024 output
channels
'w3' : tf.Variable(tf.random_normal([7 * 7 * 64, 1024])),
# Weight for Convolutional Layer 1: 1024 input channels, 25(number of cla
sses) output channels
'w4' : tf.Variable(tf.random_normal([1024, n_classes]))
}
biases = {
# Bias for Convolutional Layer 1
'b1' : tf.Variable(tf.random_normal([32])),
# Bias for Convolutional Layer 2
'b2' : tf.Variable(tf.random_normal([64])),
# Bias for Fully Connected Layer 1
'b3' : tf.Variable(tf.random_normal([1024])),
24
# Bias for Outout Layer
'b4' : tf.Variable(tf.random_normal([n_classes]))
}
25
loss_op = tf.nn.softmax_cross_entropy_with_logits_v2(logits = logits, labels
= Y)
optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate)
train_op = optimizer.minimize(loss_op)
init = tf.global_variables_initializer()
plt.plot(list(range(len(cost_hist))), cost_hist)
plt.title("Change in cost")
plt.show()
plt.plot(list(range(len(acc_hist))), acc_hist)
plt.title("Change in accuracy")
plt.show()
7. Mentrain Neural Network pada seluruh dataset untuk mendapatkan Weight dan Bias yang Dioptimalkan
print('Training on the whole dataset....\n')
with tf.Session() as sess:
sess.run(init) # Running Initializer
cost_hist, acc_hist = [], []
for epoch in range(1, epochs + 1):
_x, _y = next_batch(batch_size, x, y_encoded)
# Running Optimizer
sess.run(train_op,
feed_dict = {
X : _x,
Y : _y,
keep_prob : dropout
})
if epoch % display_step == 0:
# Calculating Loss and Accuracy on the current Epoch
loss, acc = sess.run([loss_op, accuracy],
feed_dict = {
X : _x,
27
Y : _y,
keep_prob : 1.0
})
loss = sum(loss)
cost_hist.append(loss)
acc_hist.append(acc)
print('Epoch ' + str(epoch) + ', Cost: ' + str(loss) + ', Accurac
y: ' + str(acc * 100) + ' %')
print('-' * 50)
print('\nOptimization Finished\n')
print('Accuracy after training on whole dataset Data: ' + str(sess.run(ac
curacy,
feed_dict = {
X : x,
Y : y_encoded,
keep_prob : 1.0
}) * 100) + ' %')
W = sess.run(weights)
B = sess.run(biases)
plt.plot(list(range(len(cost_hist))), cost_hist)
plt.title("Change in cost")
plt.show()
28
plt.plot(list(range(len(acc_hist))), acc_hist)
plt.title("Change in accuracy")
plt.show()
data_test.head()
def get_prediction(img):
with tf.Session() as sess:
pred = sess.run(y_pred, feed_dict = { X : img, keep_prob : 1.0 })
img = img.reshape(28, 28)
pred = list(pred.flatten())
pred = chr(pred.index(max(pred)) + 65)
return (img, pred)
29
plt.show()
9.Menyimpan parameter
for key in W.keys():
np.save(key, W[key])
30
Outputnya :
31
DAFTAR PUSTAKA
32