【Matlab】자신용 망비록 DeepLearning편

11048 단어 matlab

전치



이 페이지는 DeepLearning 관련으로 자신이 자주 사용하는 함수 등을 모으고 있습니다.
표현에 미비가 많을까 생각합니다만, 초보자이므로 거기는 놓치십시오. . .
공부 전 ① → MATLAB 및 Simulink 교육 (DeepLearning 입문)

학습용/테스트용 데이터스토어 작성



imageDatastore : matlab에 대한 데이터 스토어 만들기


%フォルダ内のfilexx.jpgを全てデータストアに格納 '*'はワイルドカード
imds = imageDatastore('file*.jpg') 
%'Flowers'内の全てのサブフォルダ内の画像をデータストアに格納
flwrds = imageDatastore('Flowers','IncludeSubfolders',true) 
%'Flowers'内のサブフォルダ名をラベルにしてデータストアを生成する
flwrds = imageDatastore('Flowers','IncludeSubfolders',true,'LabelSource','foldernames');
%ラベルの表示
flwrds.Labels % カテゴリカル配列として出力される

readimage : 데이터스토어에서 임의의 이미지 추출


I = readimage(ds,n) %データストアdsに格納しているn番目の画像配列を抽出する

montage : 데이터스토어의 모든 이미지 보기


imds = imageDatastore('file*.jpg')
montage(imds)

결과


splitEachLabel : 기존 데이터 스토어를 Train 용과 Test 용으로 구분



imds : 레이블이 지정된 이미지 데이터 스토어
p : traindata의 비율(0~1의 범위) 나머지는 testdata에 할당된다
n : traindata에 포함 된 각 레이블의 데이터 수 (1 이상)
%各Labelの画像を一定の割合で順番通りに割り振りする場合
[traindata,testdata] = splitEachLabel(imds,p) 

%各Labelの画像を一定の割合で%ランダムに割り振りする場合
[traindata,testdata] = splitEachLabel(imds,p,'randomized')

%各Labelの画像を一定のデータ数で順番通りに割り振りする場合
[traindata,testdata] = splitEachLabel(imds,n) 

이미지 전처리



imresize : 이미지를 임의의 크기로 변경



※이 처리로 CNN에 Input하는 화상의 사이즈를 정돈한다
%img: 1096x822x3の画像
img = imresize(img,[227 227]); %227(行)x227(列)に縦横リサイズされる.(RGBの3次元は省略可)

augmentedImageDatastore : 폴더 (데이터 스토어)의 이미지를 모아서 이미지 편집



※예: 화상 사이즈를 변경하는 경우)
사이즈 변경 후의 새로운 화상은 원 폴더내의 화상을 기초로 생성되지만, 생성된 화상은 PC에 보존하지 않고 용량을 압박하지 않기 때문에, 대량의 데이터의 전처리에 유효.
auds = augmentedImageDatastore([227 227],imds) %imdsはデータストア
net = alexnet
pred = classify(net,auds) %Alexnetでのクラス分類にも画像サイズ変更後のデータストアを使用可能
%%画像サイズを変更&グレースケールからカラーに変更する場合
auds = augmentedImageDatastore([227 227],imds,'ColorPreprocessing','gray2rgb')

전이 학습을 위한 처리



①전 결합층의 출력 라벨 수를 조정한다


%使用する学習済みCNNを決める
anet = alexnet;
layers = anet.Layers

%n個の出力に対応した全結合層をfclayerに格納
fclayer = fullyConnectedLayer(n)

%Alexnetの最後の全結合層(layersに格納された23番目の層)を変更する
mylayers(23) = fclayer 

② 기타 레이어 조정



①에서 전체 결합층만 라벨 수를 맞췄지만 최종 출력층은 기존 학습 모델에 맞춘 파라미터 그대로.
이대로 사용하면 오류가 발생하기 때문에 전이 학습 라벨 수에 따라 출력 레이어도 조정합니다.
cl = classificationLayer('Name','RevisedOutput') %引数はなくてもOK。この場合は出力層の名前を付けている
layers(end) = cl

학습 시작 준비



trainingOptions : 학습 옵션 설정



학습용 옵션을 설정합니다. 자세한 내용은 공식 참조
%学習アルゴリズム “モーメンタム項付き確率的勾配降下法” の既定のオプションを格納する
opts = trainingOptions('sgdm')

대부분의 경우 처음에는 대부분의 옵션을 기본값으로 두고 학습을 시도합니다.
그러나 전이 학습을 수행하는 경우 InitialLearnRate를 기본 0.01보다 작은 값으로 설정하여 시작하는 것이 일반적입니다.

학습률은 알고리즘이 네트워크의 가중치를 변경할 때의 진폭을 제어합니다. 전이 학습의 목표는 기존 네트워크를 미세 조정하는 것입니다. 따라서 일반적으로 0에서 학습을 하는 경우보다 가중치를 변경할 때의 진폭을 줄여야 합니다.
%既定の学習率'InitialLearnRate'の値を変更する
opts = trainingOptions('sgdm','InitialLearnRate',0.001)

GPU 준비
GPU 및 Parallel Computing Toolbox 사전 설치

학습 시작



에포크와 미니 배치
모든 학습용 데이터 A개 중 미니 배치를 B개로 하면 1 반복에서 1 미니 배치를 학습한다.
모든 학습용 데이터를 학습하면 1 에포크가 된다.

trainNetwork : 학습 시작


%学習には1:データストア,2:使用するネットワーク, 3:学習オプションを引数として入力する。
[flowernet,info] = trainNetwork(traindata, layers, opts); %flowernetは吐き出したCNNネットワーク, infoは学習情報

학습 결과 평가



info.TrainingLoss : 학습 손실 표시


%学習損失をプロット表示する
plot(info.TrainingLoss)

학습 결과 CNN을 이용하여 이미지 분류 → 실제 라벨과 비교하여 정답률을 산출


flwrPreds = classify(flowernet,testImags) %学習結果CNNを用いてテストデータを分類
numCorrect = nnz(flwrPreds == flwrActual) %nnz関数を用いて正当数をカウント
fracCorrect = numCorrect/numel(flwrPreds) %正答率算出


※nnz(X) 비제로 요소의 수를 돌려준다

부정해의 분포를 조사


confusionchart(testImgs.Labels,flwrPreds)

결과
대각선 요소가 정답이 된다

좋은 웹페이지 즐겨찾기