主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

심층신경망디자이너를사용한전이학습

이예제에서는심층신경망디자이너앱을사용하여전이학습을대화형방식으로수행하는방법을보여줍니다。

전이학습은사전훈련된딥러닝신경망이새로운작업을학습하도록미세조정하는과정입니다。전이학습을사용하는것은신경망을처음부터훈련시키는것보다일반적으로더빠르고쉽습니다。학습된특징을보다적은양의데이터를사용하여새로운작업으로빠르게전이할수있습니다。

다음단계에따라심층신경망디자이너를사용하여영상분류를위한전이학습을수행합니다。

  1. 심층신경망디자이너앱을열고사전훈련된신경망을선택합니다。

  2. 새데이터세트를가져옵니다。

  3. 마지막계층들을새로운데이터세트에적응된새로운계층들로교체합니다。

  4. 전이된계층보다새계층에서학습이더빨리이루어지도록학습률을설정합니다。

  5. 심층신경망디자이너를사용하여신경망을훈련시키거나명령줄에서훈련시키기위해신경망을내보냅니다。

데이터추출하기

작업공간에서MathWorks营销데이터세트를추출합니다。MathWorks营销데이터세트는5개의클래스(多维数据集打牌螺丝刀火炬)에속하는MathWorks기념품75개의영상을포함하는소규모데이터세트입니다。

解压缩(“MerchData.zip”);

사전훈련된신경망선택하기

심층신경망디자이너를열려면탭의머신러닝및딥러닝에서앱아이콘을클릭합니다。또는명령줄에서앱을열수도있습니다。

deepNetworkDesigner

심층신경망디자이너는다양한영상에알맞은풍부한특징표현을학습한여러사전훈련된영상분류신경망을제공합니다。전이학습은영상이신경망을훈련시키는데사용된원래영상과비슷한경우에가장효과적입니다。훈련영상이ImageNet데이터베이스의영상과같은자연영상이라면어떠한사전훈련된신경망이라도모두적합합니다。사용가능한신경망목록과이들을비교하는방법은사전훈련된심층신경망항목을참조하십시오。

데이터가ImageNet데이터와매우다르다면,예를들어아주작은영상,스펙트로그램또는영상이아닌데이터가있다면새로운신경망을훈련시키는것이나을수있습니다。신경망을처음부터훈련시키는방법을보여주는예제는심층신경망디자이너를사용하여간단한시퀀스분류신경망만들기在深度网络设计中训练简单的语义分割网络항목을참조하십시오。

SqueezeNet에는추가지원패키지가필요하지않습니다。다른사전훈련된신경망의경우,필수지원패키지가설치되어있지않으면앱에서설치옵션이제공됩니다。

사전훈련된신경망목록에서SqueezeNet을선택하고열기를클릭합니다。

신경망탐색하기

심층신경망디자이너의디자이너창에전체신경망의축소된형태가표시됩니다。

신경망플롯을살펴봅니다。마우스를사용하여확대하려면Ctrl+스크롤휠을사용하십시오。패닝하려면화살표키를사용하거나스크롤휠을누르고마우스를끄십시오。속성을볼계층을하나선택합니다。속성창에서신경망요약을보려면모든계층을선택취소하십시오。

데이터가져오기

심층신경망디자이너로데이터를불러오려면데이터탭에서데이터가져오기>영상데이터가져오기를클릭하십시오。영상데이터가져오기대화상자가열립니다。

데이터소스목록에서폴더를선택합니다。찾아보기를클릭하고추출된MerchData폴더를선택합니다。

영상증대하기

훈련데이터에영상증대를적용하도록선택할수있습니다。심층신경망디자이너앱은다음과같은증대옵션을제공합니다。

  • x축에서의무작위반사

  • y축에서의무작위반사

  • 무작위회전

  • 무작위재스케일링

  • 무작위가로평행이동

  • 무작위세로평행이동

데이터에무작위방식의증대를적용하여훈련데이터의양을효과적으로늘릴수있습니다。또한증대를사용하면신경망이왜곡된영상데이터에대해일관된결과를도출하도록훈련시킬수있습니다。예를들어,신경망이회전된입력영상에대해서도일관된결과를도출하도록하기위해입력영상에무작위로회전을가할수있습니다。

이예제에서는x축에서무작위반사를적용하고,도(-90、90)에서무작위회전을적용하고,[1,2]범위에서무작위재스케일링을적용합니다。

검증데이터

훈련데이터에서검증데이터를분할하거나다른소스에서가져오는방법으로검증데이터를가져오도록선택할수도있습니다。검증은훈련데이터를기준으로새데이터에서의모델성능을비교하여추정하며,성능을모니터링하고과적합을방지하는데도움을줍니다。

이예제에서는영상의30%를검증용으로사용합니다。

가져오기를클릭하여데이터를심층신경망디자이너로가져옵니다。

데이터시각화하기

심층신경망디자이너를사용하여데이터탭에서훈련데이터와검증데이터의분포를시각적으로조사할수있습니다。이예제에는데이터세트에5개의클래스가있는것을볼수있습니다。각클래스의임의관측값을볼수도있습니다。

훈련을위해신경망준비하기

디자이너창에서신경망을편집하여데이터에서클래스개수를새로지정합니다。전이학습을위해신경망을준비하려면마지막학습가능한계층과마지막분류계층을바꾸십시오。

마지막학습가능한계층바꾸기

사전훈련된신경망을전이학습을위해사용하려면클래스개수가새로운데이터세트와일치하도록변경해야합니다。먼저신경망에서마지막학습가능한계층을찾습니다。SqueezeNet의마지막학습가능한계층은마지막컨벌루션계층인“conv10”입니다。이경우컨벌루션계층을필터의개수가클래스개수와같은새로운컨벌루션계층으로바꿉니다。

캔버스에새convolution2dLayer를끌어서놓습니다。원래컨벌루션계층과일치하도록FilterSize1,1로설정합니다。

NumFilters속성은분류문제에대한클래스개수를정의합니다。NumFilters를새데이터의클래스개수(이예제에서는5)로변경합니다。

전이된계층보다새계층에서학습이더빨리이루어지도록WeightLearnRateFactorBiasLearnRateFactor10으로설정하여학습률을변경합니다。

마지막2차원컨벌루션계층을삭제하고새로추가한계층을대신연결합니다。

출력계층바꾸기

전이학습에서는출력계층을교체해야합니다。계층라이브러리의끝으로스크롤한다음,캔버스로새classificationLayer를끌어서놓습니다。원래분류계층을삭제하고대신새계층을연결합니다。

새출력계층에대해OutputSize를설정할필요는없습니다。심층신경망디자이너는훈련시점에자동으로데이터로부터계층의출력클래스를설정합니다。

신경망확인하기

신경망이훈련준비가되었는지확인하려면분석을클릭하십시오。딥러닝신경망분석기에보고되는오류가없으면편집한신경망이훈련시킬준비가된것입니다。

신경망훈련시키기

가져오거나직접만든신경망을심층신경망디자이너에서훈련시킬수있습니다。

디폴트설정을사용하여신경망을훈련시키려면훈련탭에서훈련을클릭하십시오。디폴트훈련옵션은대규모데이터세트에더적합합니다。소규모데이터세트의경우미니배치크기와검증빈도에더작은값을사용하십시오。

훈련을보다세부적으로제어하려면훈련옵션을클릭하고훈련에사용할설정을선택합니다。

  • 전이된계층의학습을늦추려면초기학습률을작은값으로설정하십시오。

  • 검증데이터에대한정확도가时代1회마다한번씩계산되도록검증빈도를지정합니다。

  • 时代를적은횟수로지정합니다。时代1회는전체훈련데이터세트에대한하나의완전한훈련주기를의미합니다。전이학습에서는그렇게많은时代횟수만큼훈련하지않아도됩니다。

  • 미니배치의크기,즉각반복당사용할영상의개수를지정합니다。매时代마다데이터세트전체가사용되도록하려면미니배치크기가훈련샘플개수를균등하게나누도록설정하십시오。

이예제에서는InitialLearnRate0.0001로,ValidationFrequency5로,MaxEpochs8로설정합니다。55개의관측값이있으므로매时代마다데이터세트전체가사용되도록MiniBatchSize11로설정하여훈련데이터를균등하게나눕니다。훈련옵션선택에대한자세한내용은trainingOptions항목을참조하십시오。

지정된훈련옵션을사용하여신경망을훈련시키려면닫기를클릭하고훈련을클릭하십시오。

심층신경망디자이너에서는훈련진행상황을시각화하고모니터링할수있습니다。그런다음필요한경우훈련옵션을편집하여신경망을다시훈련시킬수있습니다。

결과를내보내고MATLAB코드생성하기

훈련된가중치와함께신경망아키텍처를내보내려면훈련탭에서내보내기>훈련된신경망및결과내보내기를선택하십시오。심층신경망디자이너가훈련된신경망을변수trainedNetwork_1로내보내고훈련정보를변수trainInfoStruct_1로내보냅니다。

trainInfoStruct_1
trainInfoStruct_1 =结构体字段:TrainingLoss:[1×40双]TrainingAccuracy:[1×40双]ValidationLoss:[4.3374 1.3966 2.4329南南南南南南南南南南南南南南南0.7526 0.6424 0.5940 0.6349南南南南南南南南南南南南南南南南0.5490 0.5179]ValidationAccuracy:[10 15南南南南南南南南南南南70 90 85年南南南南南南南南南南南南85 90年南南南南南南南南95]BaseLearnRate:[1×40双]FinalValidationLoss: 0.5179 FinalValidationAccuracy: 95

신경망과사용된훈련옵션을다시만들어주는MATLAB코드를생성할수도있습니다。훈련탭에서내보내기>훈련에사용할코드생성을선택합니다。MATLAB코드를검토하여훈련을위해프로그래밍방식으로데이터를준비하고신경망아키텍처를만들고신경망을훈련시키는방법을살펴봅니다。

새영상분류하기

훈련된신경망을사용하여분류할새영상을불러옵니다。

我= imread (“MerchDataTest.jpg”);

심층신경망디자이너가신경망입력크기와일치하도록훈련중에영상의크기를조정합니다。신경망입력크기를보려면디자이너창에서imageInputLayer(첫번째계층)를선택하십시오。이신경망의입력크기는227×227입니다。

신경망입력크기와일치하도록테스트영상의크기를조정합니다。

I = imresize(I, [227 227]);

훈련된신경망을사용하여테스트영상을분류합니다。

(YPred,聚合氯化铝)= (trainedNetwork_1, I)进行分类;imshow(I) label = YPred;标题(string(标签)+", "+ num2str(100 *马克斯(聚合氯化铝),3)+“%”);

참고항목

관련항목