本文介绍了如何在Matlab上实现任意神经网络的迁移训练。
背景
迁移训练在深度学习中是一种非常高效的训练策略。它允许神经网络在已经训练的基础上再次被训练,这样极大的提高了训练效率,缩短了训练时间。这一过程在PyTorch, TensorFlow等平台上可以非常简单的实现,但是在Matlab却是近两年才被允许,并且直到现在(2021.07)都没有中文的官网文档。所以,我想在这里分享自己的经验,供大家参考并提出意见。文中的训练部分代码参考了官方文档。
敲黑板:得益于有工作空间,在matlab上训练神经网络就是一直点’run section’。极为方便
方法
平台
Matlab 2020b
数据集
MNIST数字,输入是失真的图片,输出是校正后的图片。详情见之前的一篇文章《基于卷积神经网络的数字重建》。后期我也会把所有的资源上传。
神经网络
Unet, 详情见《基于卷积神经网络的数字重建 - Unet Matlab代码》
这里需要注意的是,dlnet创建时不能有输出层,所以最后的regression layer要删去。输入层需要做如下更改。
%input
inputlayer = imageInputLayer(inputTileSize,'Name','ImageInputLayer','Mean',mean(XTrain,4));
%output
layers = [layers; finalConv];
具体代码和训练过程
%% load data
XTrain = images_32M; % 失真的图片
YTrain = images_32; % 原图
Input_size = size(images_32,1);
%% create a Unet
lgraph = createUnet_regression(Input_size,XTrain);
new_dlnet = dlnetwork(lgraph); % 这一步非常重要,必须要转化成dlnetwork才可以
analyzeNetwork(new_dlnet)
%% Specify Training Options
miniBatchSize = 50; % 根据GPU或者内存调整
numEpochs = 1;
numObservations = size(XTrain,4);
numIterationsPerEpoch = floor(numObservations./miniBatchSize);
executionEnvironment = "auto";
learnRate = 0.001;
gradDecay = 0.75;
sqGradDecay = 0.95;
%Visualize the training progress in a plot.
plots = "training-progress";
%% Train Network
if plots =&