Belajar Deep Machine Learning sudah banyak dibahas terutama menggunakan Python, tensorflow, keras, ada juga yang menggunakan pytorch. Namun demikian bagi kalian yang terbiasa menggunakan Matlab, maka tidak perlu kuatir. Belajar Deep Machine Learning di Matlab sangat mudah koq, nggak pakai ribet. Sebagai bahan permulaan belajar, maka saya rajin sekali banyak baca dokumentasinya di Matlab sebelum memulai project utamanya.
Cerita ini dimulai ketika ada project yang berkenaan dengan deep machine learning untuk melakukan semantic segmentation, padahal saya masih menggunakan Maltlab versi lama yaitu Matlab R2018a sehingga harus install toolbox deep machine learning tersendiri.
Download Toolbox deep machine learning di Matlab
Contents
Untuk download toolbox deep machine learning, langkahnya cukup mudah koq, pastikan kalian sudah register terlebih dahulu melalui account di https://www.mathworks.com karena pas download butuh daftar dulu.
Kalau sudah, kalian buka saja aplikasinya matlab pilih menu APPS -> get more Apps ketikan saja deep machine learning, langsung saja install
pastikan kalian terkoneksi dengan internet ya! Atau kalian bisa download di https://www.mathworks.com/matlabcentral/fileexchange
Mencoba Deep Learning CNN untuk klasifikasi tulisan angka
Hal umum untuk menggunakan algoritma deep machine learning yaitu algoritma CNN convolutional neural network untuk klasifikasi tulisan tangan, saya pernah bahas disini
Sebenarnya matlab sudah ada dokumentasinya koq, tapi saya akan bahasa disini agar kita bisa belajar bersama-sama. Dataset yang digunakan pas install matlab sudah ada koq yaitu di ‘C:\Program Files\MATLAB\R2018a\toolbox\nnet\nndemos\nndatasets\DigitDataset’ bisa kalian buka menggunakan explorer akan terdapat folder sesuai dengan angkanya
Jumlahnya sekitar 10.000 gambar karena masing-masing terdiri dari 1.000 gambar untuk tiap jenis angkanya. Untuk mempermudah diatas, kita loading saja. Misalkan kita buat script dengan nama latih.m seperti berikut
clc;clear all;close all; digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ... 'nndemos','nndatasets','DigitDataset');
Langkah selanjutnya membuat image datastore yang didalamnya adalah struct yang memuat
- Files
- Labels
Sekarang kita buat image datastore terlebih dahulu
imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true, ... 'LabelSource','foldernames');
Kalian bisa melihat isi variabel imds seperti berikut
Artinya bertipe struct dengan key nya berupa Files dan Labels, agar lebih yakin maka kita bisa tampilkan gambar secara random, misalkan saya tampilkan 15 gambar, apakah gambar tersebut berisi tulisan tangan angka?
figure numImages = 10000; jumlah_objek = 15; perm = randperm(numImages,jumlah_objek); for i = 1:jumlah_objek subplot(3,5,i); imshow(imds.Files{perm(i)}); drawnow; end
Hasilnya sebagai berikut
Ok berarti sudah betul isi folder tersebut,
Spliting Dataset
Dari masing-masing angka yaitu 0 sampai 9 atau 10 gambar dengan masing-masing gambar punya 1.000 maka 10 gambar x 1.000 = 10.000 gambar. Nah dari 1.000 gambar tersebut 750 akan digunakan sebagai dataset training, caranya cukup mudah
numTrainingFiles = 750; [imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');
jadi ukuran menjadi berikut
- imdsTrain : 7.500 gambar
- imdsTest : 2.500 gambar
Membuat Model CNN
Model klasifikasi menggunakan CNN mempunyai arsitektur sebagai berikut terdiri dari 7 layer
layers = [ ... imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer];
Bila di visualkan dengan Network Analyzer sebagai berikut
Pengaturan paramater latihan
Untuk paramater latihan menggunakan
- stochastic gradient descent dengan momentum.
- maximum epochs 20,
- learning rate of 0.0001.
options = trainingOptions('sgdm', ... 'MaxEpochs',20,... 'InitialLearnRate',1e-4, ... 'Verbose',false, ... 'Plots','training-progress');
Secara umum, maka nilai yang lainnya default, kalian bisa melihat options berikut
Kalau sudah OK, maka lakukan training dengan kode berikut
net = trainNetwork(imdsTrain,layers,options);
Kalian bisa melihat bahwa Belajar Deep Machine Learning di Matlab sangat mudah dilakukan melalui grafik accuracy dan loss berikut dapat diketahui bahwa proses deep machine learning bekerja dengan baik ditandai dengan accuracy semakin naik dan loss semakin turun
Sekarang kita coba saja dengan sembarang gambar
t = [digitDatasetPath '\9\image8049.png']; I = imread(t); YPred = classify(net,I); figure,imshow(I),title(cellstr(YPred))
Hasilnya
Mudah bukan? ntar kita lanjut dengan pembahasan yang lainnya. Model diatas bisa kalian simpan dalam format *.mat dengan perintah berikut
save model.mat net
Selain bisa menggunakan *.mat, kalian bisa menggunakan Deep Learning Toolbox Converter for ONNX Model Format
Transfer learning
Adapun bila kalian menggunakan Python maka untuk membaca file *.mat bisa kalian lakukan dengan cara berikut melalui scipy