파라미터를설정하고컨벌루션신경망훈련시키기
컨벌루션신경망의계층지정하기에서설명하는대로신경망의계층을정의했다면다음단계는신경망의훈련옵션을설정하는것입니다。trainingOptions
함수를사용하여전역훈련파라미터를정의합니다。신경망을훈련시키려면trainingOptions
에서반환되는객체를trainNetwork
함수의입력수로사용하십시오。예를들면다음과같이합니다。
options = trainingOptions('adam');trainedNet = trainNetwork(数据,层,选项);
학습가능한파라미터가있는계층에도학습파라미터를조정하기위한옵션이있습니다。자세한내용은컨벌루션계층및완전연결계층에서파라미터설정하기항목을참조하십시오。
솔버와최대纪元횟수지정하기
trainNetwork
는확률적경사하강법의다양한변형을사용하여신경망을훈련시킬수있습니다。trainingOptions
의solverName
수를사용하여최적화알고리즘을지정합니다。이러한알고리즘은손실함수에대한음의기울기방향으로작은스텝을취하여손실을최소화하도록신경망파라미터를업데이트합니다。
최초시도에사용하기좋은최적화함수는“亚当”
(自适应矩估计에서유래)솔버입니다。또는“rmsprop”
(rms전파)및“个”
(모멘텀을사용한확률적경사하강법)최적화함수를사용해보고훈련이향상되는지확인해보십시오。솔버마다더효과적결과를얻을수있는문제가각각다릅니다。다양한솔버에대한자세한내용은확률적경사하강법항목을참조하십시오。
솔버는각스텝에서데이터의서브셋을사용하여파라미터를업데이트합니다。이러한서브셋을미니 배치라고합니다。trainingOptions
의“MiniBatchSize”
이름-값쌍通讯录수를사용하여미니배치의크기를지정할수있습니다。각파라미터업데이트를반복이라고합니다。전체데이터세트를완전히한번통과하는것을时代라고합니다。trainingOptions
의“MaxEpochs”
이름-값쌍수를사용하여훈련을실시할최대纪元횟수를지정할수있습니다。디폴트값은30입니다。하지만신경망이소규모이거나대부분의학습이이미완료되어미세조정및전이학습을하는경우에는时代횟수를더적게선택할수있습니다。
데이터는기본적으로훈련을시작하기전에한번섞입니다。“洗牌”
이름-값쌍通讯录수를사용하여이설정을변경할수있습니다。
학습률을지정하고수정하기
trainingOptions
의“InitialLearnRate”
이름-값쌍通讯录수를사용하여전역학습률을지정할수있습니다。기본적으로,trainNetwork
는전체훈련을실시하는내내이값을사용합니다。원하는경우특정时代횟수마다학습률에인자를곱하여학습률을수정할수있습니다。훈련을실시하는내내고정된작은학습률을사용하는대신,훈련을시작할때는좀더큰학습률을선택하고최적화를하면서이값을점진적으로줄일수있습니다。이렇게하면훈련시간이단축되고,훈련이진행됨에따라손실의최솟값에다가갈수록더작은스텝을취할수있습니다。
팁
훈련중에미니배치손실이南
이된다면학습률이너무높은것일수있습니다。학습률을예를들어3배줄다음신경망훈련을다시시작해보십시오。
학습률을점진적으로줄이려면“LearnRateSchedule”、“分段”
이름-값쌍通讯录수를사용하십시오。이옵션을선택하면trainNetwork
는纪元10회마다학습률에0.1을곱합니다。“LearnRateDropFactor”
이름-값쌍수를사용하여초기학습률을줄일자를지정하고“LearnRateDropPeriod”
이름——값쌍인수를사용하여얼마의时代횟수후에초기학습률을줄일지지정할수있습니다。
검데이터지정하기
훈련중에신경망검을수행하려면trainingOptions
의“ValidationData”
이름-값쌍수를사용하여검데이터를지정하십시오。기본적으로,trainNetwork
50회는반복마다검증데이터의응답변수를예측하고검증손실및정확도(회귀신경망의경우RMS오차)를계산하여신경망을검증합니다。“ValidationFrequency”
이름-값쌍수를사용하여검빈도를변경할수있습니다。신경망에훈련중동작과예측중동작이다른계층(예:드롭아웃계층)이있는경우,검증정확도가훈련(미니배치)정확도보다높을수있습니다。검증의손실이더이상감소하지않으면자동으로훈련을중지하도록검증데이터를사용할수있습니다。자동검중지기능을켜려면“ValidationPatience”
이름-값쌍通讯录수를사용하십시오。
훈련을진행하는동안일정간격으로검증을수행하면신경망이훈련데이터에대해과적합되고있는지판단할수있습니다。흔히발생하는문제는신경망이새로운데이터에대해정확한예측을가능하게해주는일반적인특징을학습하는것이아니라단순히훈련데이터를”기억“해버리는것입니다。신경망이과적합되고있는지확인하려면훈련손실과정확도를그에대응하는검증메트릭과비교해보십시오。훈련손실이검증손실보다크게낮거나훈련정확도가검증정확도보다크게높다면신경망이과적합되고있는것입니다。
과적합을줄이려면데이터대를추가해볼수있습니다。augmentedImageDatastore
를사용하여입력상에대해무작위변환을수행하십시오。이렇게하면신경망이사물의정확한위치와방향을기억하는것을방지하는데도움이됩니다。또는“L2Regularization”
이름-값쌍表수를사용하여2정규화를늘리고컨,벌루션계층뒤에배치정규화계층을사용하고,드롭아웃계층을추가해볼수도있습니다。
하드웨어리소스선택하기
사용가능한경우trainNetwork
는기본적으로훈련에gpu를사용합니다。Gpu를사용할수없으면trainNetwork
는cpu를사용합니다。또는“ExecutionEnvironment”
이름-값쌍通讯录수를사용하여사용하려는실행환경을지정할수도있습니다。단일cpu (“cpu”
),단일gpu (“图形”
),복수의gpu (“multi-gpu”
)또는로컬병렬풀이나계산클러스터(“平行”
)를지정할수있습니다。“cpu”
를제외한모든옵션에는并行计算工具箱™가필요합니다。显卡에서훈련시키려면지원되는显卡장치가필显卡합니다。지원되는장치에대한자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。
검사지점신경망을저장하고훈련재개하기
深度学习工具箱™를사용하면훈련중에신경망을.mat파일로저장할수있습니다。신경망또는데이터세트의규모가커서훈련시키는데오래걸리는경우에는이와같이주기적으로저장하는것이특히유용합니다。어떤이유로훈련이중단된경우,마지막으로저장된검사지점신경망에서부터훈련을재개할수있습니다。trainNetwork
가검사지점신경망을저장하도록하려면trainingOptions
의CheckpointPath
옵션을사용하여경로의이름을지정해야합니다。지정한경로가존재하지않는경우,trainingOptions
는오류를반환합니다。
trainNetwork
는검사지점신경망파일에자동으로고유한이름을할당합니다。net_checkpoint__351__2018_04_12__18_09_52.mat
라는예제이름에서351은반복횟수이고,2018年_04_12
는날짜이고,18 _09_52
는trainNetwork
가신경망을저장한시간입니다。검사지점신경망파일은파일을더블클릭하거나명령줄에서명负载령을사용하여불러올수있습니다。예를들면다음과같습니다。
负载net_checkpoint__351__2018_04_12__18_09_52.mat
trainNetwork
에대한입력수로신경망의계층을사용하여훈련을재개할수있습니다。예를들면다음과같습니다。
trainNetwork (XTrain TTrain、net.Layers选项)
컨벌루션계층및완전연결계층에서파라미터설정하기
컨벌루션계층및완전연결계층과같이학습가능한파라미터가있는계층에서,학습파라미터를trainingOptions
로지정된전역값과다르게설정할수있습니다。예를들어,편향이나가중치에대한학습률을조정하기위해각각계층의BiasLearnRateFactor
속성이나WeightLearnRateFactor
속성에대해값을지정할수있습니다。trainNetwork
함수는trainingOptions
를이러한marketing자와함께사용하여,지정한학습률을곱합니다。마찬가지로,각각BiasL2Factor
속성과WeightL2Factor
속성을지정하여이러한계층의가중치와편향에대한2정규화자를지정할수도있습니다。trainNetwork
는trainingOptions
를이러한인자와함께사용하여,지정한L2자를곱합니다。
컨벌루션계층및완전연결계층의가중치초기화하기
계층가중치는학습가능한파라미터입니다。계층의权重
속성을사용하여가중치에대한초기값을직접지정할수있습니다。신경망을훈련시킬때계층의权重
속성이비어있지않으면trainNetwork
는权重
속성을초기값으로사용합니다。权重
속성이비어있으면trainNetwork
는 계층의WeightsInitializer
속성으로지정된이니셜라이저를사용합니다。
신경망훈련시키기
신경망의계층과훈련파라미터를지정한후에는훈련데이터를사용하여신경망을훈련시킬수있습니다。데이터,계층및훈련옵션은모두아래예제에서처럼trainNetwork
함수의입력수가됩니다。
layers = [imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,'Stride',2) fullyConnectedLayer(10) softmaxLayer classificationLayer];options = trainingOptions('adam');convnet = trainNetwork(数据,层,选项);
훈련데이터는배열,테이블또는ImageDatastore
객체일수있습니다。자세한내용은trainNetwork
함수도움말페이지를참조하십시오。
참고 항목
trainingOptions
|trainNetwork
|Convolution2dLayer
|FullyConnectedLayer