MATLAB Deep Learning Toolbox 설치 및 수행 – RHEL7/Centos7 환경
MATLAB Deep Learning Toolbox 설치 및 수행 – RHEL7/Centos7 환경
-
MATLAB 다운로드 및 설치
https://kr.mathworks.com/discovery/deep-learning.html
우측 상단 소프트웨어 평가판 다운로드
신청에 관련된 기본 정보 입력하면, 아래와 같이 Trial License 코드와 패키지를 다운로드 받을 수 있음.
위의 라이선스 ID 를 기록해 두고, Linux (64-bit) 버튼을 클릭한다.
다운로드를 받으면 아래와 같은 패키지 파일을 다운 받는다
matlab_R2018b_glnxa64.zip
설치하고자 하는 서버의 /usr/local/src 에 해당 파일을 복사해 둔다.
# cd /usr/local/src
# mkdir MATLAB_SRC; mv matlab_R2018b_glnxa64.zip MATLAB_SRC
# cd MATLAB_SRC; unzip matlab_R2018b_glnxa64.zip
# ./install
Mathlab 설치 시 라이선스 인증과 부가 toolbox 설치 시 인터넷 연결이 반드시 필요하다.
인터넷 동작 유무를 확인한다. (연구소와 같이 외부 인터넷 연결이 차단된 경우, Proxy 를 통한 연결등을
Connection Settings 에서 확인이 가능하다. 외부 인터넷 연결이 되는 환경에서는 그냥 Next 를 선택함.
라이선스 동의 체크하고 Next
라이선스를 신청할 때 사용한 이메일과 패스워드를 입력한다. 만일 조직 단위로 라이선스 계약이 체결된
경우 회사나 학교 정식 메일 주소로 연결을 하도록 한다.
해당하는 라이선스를 선택하고 Next (위에서 확인한 평가판 라이선스 ID 부분이 여기에 들어있어야 한다)
설치 위치 지정하고 Next
사용하고자 하는 Toolbox 선택하고 Next (MATLAB, Deep Learning Toolbox, Parallel Computing Toolbox 는 반드시 선택)
Matlab 명령을 기본 PATH 위치에 link 함.
설치 진행됨. ..
-
MATLAB 사용하기
MATLAB 을 실행하는 명령어는 matlab 이다.
아래는 몇가지 실행 방법이다.
# matlab : 일반적인 실행 방법
# matlab -nosplash -desktop : matlab 실행 시 최소 띄위지는 아래 splash 를 띄우지 않는다.
스케줄러를 통해 matlab 을 실행할 경우, Splash 가 뜬 후, 실제 Matlab gui 가 실행된다.
이때 스케줄러 내에 DISPLAY 변수가 splash 에만 적용되고, 두번째 띄워지는 matlab gui 에는
반영되지 않는 문제가 있다. 스케줄러 상에서 matlab gui 실행 시 사용되는 명령 구문 .
# matlab -nodisplay -nosplash : 배치모드로 사용할때 gui 를 띄우지 않고 수행하는 방법이다.
# matlab -nosoftwareopengl : 3D GL driver 가 있을 경우, 이용한다. Matlab 에는 3D 그래프등 다양한
이미지 처리 기능이 있다. 이때 HW 그래픽 가속이 필요할 수 있다.
일단 기본 방법으로 실행하면 아래와 같이 matlab gui 가 실행된다.
# matlab
가운데 명령 창을 통해 matlab code 를 실행해 보면 동작 유무를 확인할 수 있다.
기본적인 동작 유무 확인으로 plot 차트를 하나 그려본다.
아래와 같이 파일을 하나 만든다. VI 편집기로 만들어도 되고, matlab에서 좌측에 “새로만들기” 버튼을
누르면 편집기가 생성된다. 내용을 복사한 후, fluent2.log 명으로 저장
# vi fluent2.log
1 1.0000e+00
2 1.0000e+00
3 5.9437e-01
4 5.2764e-01
5 3.7845e-01
6 3.4240e-01
7 2.7706e-01
8 2.1786e-01
9 1.7236e-01
10 1.4756e-01
11 1.3594e-01
12 1.7600e-01
13 1.5246e-01
14 1.2266e-01
15 1.0237e-01
16 9.2072e-02
.
.
이 파일 내용으로 plot 을 그려 본다.
MATLAB 명령창에 아래 내용을 입력하면 된다.
A=textread (‘fluent2.log’)
plot (A(:,1),A(:,2))
다음 테스트를 위해 명령창 내용을 지워본다
>> clc
우측 레이어창을 보면 앞 작업에 사용한 MATLAB 변수가 저장되어 있다. 이 부분도 지운다.
>> clearvars
테스트 하는 MATLAB 코드가 복잡한 경우 일일이 복사하기 귀찮을 수 있다.
이때는 MATLAB 코드 구문을 파일로 저장해 두고, 해당 스크립트 파일을 실행하여 처리할 수도 있다.
우측에 파일 explore 창의 matlab_mnist.m 파일을 열어본다. 그럼 편집기가 열리면 내용이 나타난다.
위 내용을 run 명령으로 일괄적으로 자동 실행해 본다.
MATLAB 명령창에 아래 내용 실행
script_name = ‘matlab_mnist.m’
run (script_name)
그럼..아래와 같이 모든 코드 내용이 자동으로 실행되어 진다.
-
MATLAB 딥러닝 코드 실행하기
아래 사이트에 MATLAB으로 실행해 볼 수 있는 딥러닝 예제가 여러 있다.
한줄 한줄 MATLAB 명령창에 복사하여 실행해 보며 코드 내용을 검증한다.
https://kr.mathworks.com/solutions/deep-learning/examples.html
딥러닝 Training 단계에서 GPU 가 장착된 시스템이라면 자동으로 GPU 가 이용되고,
Multi Core 환경에서는 자동으로 Multi Threads로 병렬계산 되는 것을 확인할 수 있을 것이다.
추천 샘플
//// 기본적인 동작 유무 확인에 적함.
# vi matlab_mnist.m
=====================================================
digitDatasetPath = fullfile(matlabroot,’toolbox’,’nnet’,’nndemos’, …
‘nndatasets’,’DigitDataset’);
imds = imageDatastore(digitDatasetPath, …
‘IncludeSubfolders’,true,’LabelSource’,’foldernames’);
figure;
perm = randperm(10000,20);
for i = 1:20
subplot(4,5,i);
imshow(imds.Files{perm(i)});
end
labelCount = countEachLabel(imds)
img = readimage(imds,1);
size(img)
numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,’randomize’);
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(3,8,’Padding’,’same’)
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,’Stride’,2)
convolution2dLayer(3,16,’Padding’,’same’)
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2,’Stride’,2)
convolution2dLayer(3,32,’Padding’,’same’)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
options = trainingOptions(‘sgdm’, …
‘InitialLearnRate’,0.01, …
‘MaxEpochs’,4, …
‘Shuffle’,’every-epoch’, …
‘ValidationData’,imdsValidation, …
‘ValidationFrequency’,30, …
‘Verbose’,false, …
‘Plots’,’training-progress’);
net = trainNetwork(imdsTrain,layers,options);
YPred = classify(net,imdsValidation);
YValidation = imdsValidation.Labels;
accuracy = sum(YPred == YValidation)/numel(YValidation)
====================================================
/// 조금 그래픽한 결과를 보기 싶을때 .
/// 단 실행 시 alexnet toolbox 를 설치해야함.
# vi matlab_alexnet.m
====================================================
net = alexnet;
net.Layers
layer = 23;
channels = [9 188 231 563 855 975];
net.Layers(end).Classes(channels)
I = deepDreamImage(net,layer,channels);
figure
I = imtile(I);
imshow(I)
iterations = 100;
channels = 9;
I = deepDreamImage(net,layer,channels, …
‘Verbose’,false, …
‘NumIterations’,iterations);
figure
imshow(I)
levels = 4;
channels = 739;
I = deepDreamImage(net,layer,channels, …
‘Verbose’,false, …
‘NumIterations’,iterations, …
‘PyramidLevels’,levels);
figure
imshow(I)
====================================================
/// GPU vs CPU 성능 차이를 BMT 할때 적합함.
# matlab_seq2seq.m
====================================================
load HumanActivityTrain
XTrain
X = XTrain{1}(1,:);
classes = categories(YTrain{1});
figure
for j = 1:numel(classes)
label = classes(j);
idx = find(YTrain{1} == label);
hold on
plot(idx,X(idx))
end
hold off
xlabel(“Time Step”)
ylabel(“Acceleration”)
title(“Training Sequence 1, Feature 1”)
legend(classes,’Location’,’northwest’)
featureDimension = 3;
numHiddenUnits = 100;
numClasses = 5;
layers = [ …
sequenceInputLayer(featureDimension)
lstmLayer(numHiddenUnits,’OutputMode’,’sequence’)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
options = trainingOptions(‘adam’, …
‘GradientThreshold’,1, …
‘InitialLearnRate’,0.01, …
‘LearnRateSchedule’,’piecewise’, …
‘LearnRateDropPeriod’,20, …
‘Verbose’,0, …
‘Plots’,’training-progress’);
net = trainNetwork(XTrain,YTrain,layers,options);
load HumanActivityTest
figure
plot(XTest’)
xlabel(“Time Step”)
legend(“Feature ” + (1:featureDimension))
title(“Test Data”)
YPred = classify(net,XTest);
acc = sum(YPred == YTest)./numel(YTest)
figure
plot(YPred,’.-‘)
hold on
plot(YTest)
hold off
xlabel(“Time Step”)
ylabel(“Activity”)
title(“Predicted Activities”)
legend([“Predicted” “Test Data”])
====================================================
/// CPU Multi Threads 성능 테스트 시 적합 .
# matlab_lstm.m
====================================================
[XTrain,YTrain] = japaneseVowelsTrainData;
XTrain(1:5)
figure
plot(XTrain{1}’)
xlabel(“Time Step”)
title(“Training Observation 1”)
legend(“Feature ” + string(1:12),’Location’,’northeastoutside’)
numObservations = numel(XTrain);
for i=1:numObservations
sequence = XTrain{i};
sequenceLengths(i) = size(sequence,2);
end
[sequenceLengths,idx] = sort(sequenceLengths);
XTrain = XTrain(idx);
YTrain = YTrain(idx);
figure
bar(sequenceLengths)
ylim([0 30])
xlabel(“Sequence”)
ylabel(“Length”)
title(“Sorted Data”)
miniBatchSize = 27;
inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ …
sequenceInputLayer(inputSize)
bilstmLayer(numHiddenUnits,’OutputMode’,’last’)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer]
maxEpochs = 100;
miniBatchSize = 27;
options = trainingOptions(‘adam’, …
‘ExecutionEnvironment’,’cpu’, …
‘GradientThreshold’,1, …
‘MaxEpochs’,maxEpochs, …
‘MiniBatchSize’,miniBatchSize, …
‘SequenceLength’,’longest’, …
‘Shuffle’,’never’, …
‘Verbose’,0, …
‘Plots’,’training-progress’);
net = trainNetwork(XTrain,YTrain,layers,options);
[XTest,YTest] = japaneseVowelsTestData;
XTest(1:3)
numObservationsTest = numel(XTest);
for i=1:numObservationsTest
sequence = XTest{i};
sequenceLengthsTest(i) = size(sequence,2);
end
[sequenceLengthsTest,idx] = sort(sequenceLengthsTest);
XTest = XTest(idx);
YTest = YTest(idx);
miniBatchSize = 27;
YPred = classify(net,XTest, …
‘MiniBatchSize’,miniBatchSize, …
‘SequenceLength’,’longest’);
acc = sum(YPred == YTest)./numel(YTest)
===================================================
-
터미널 명령창에서 Batch 모드 실행 방법
matlab -nosplash -nodesktop -r “try, run(‘<MATLAB_스크립트파일명>’), catch e, disp(getReport(e)), exit(1), end, exit(0);”
매번 명령 구문 입력하기 번거로우니 wrapper 스크립트를 하나 작성한다.
# vi /usr/local/bin/run_matlab
===================================================
#!/bin/sh
matlab -nosplash -nodesktop -r “try, run(‘$1’), catch e, disp(getReport(e)), exit(1), end, exit(0);”
===================================================
# chmod 755 /usr/local/bin/run_matlab
Matlab 스크립트가 있는 곳으로 가서..위의 딥러닝 스크립트 예제를 실행해 본다.
# run_matlab matlab_mnist.m