Get Started with Transfer Learning
This example shows how to use transfer learning to retrain SqueezeNet, a pretrained convolutional neural network, to classify a new set of images. Try this example to see how simple it is to get started with deep learning in MATLAB®.
Transfer learning is commonly used in deep learning applications. You can take a pretrained network and use it as a starting point to learn a new task. Fine-tuning a network with transfer learning is usually much faster and easier than training a network with randomly initialized weights from scratch. You can quickly transfer learned features to a new task using a smaller number of training images.
Extract Data
In the workspace, extract the MathWorks Merch data set. This is a small data set containing 75 images of MathWorks merchandise, belonging to five different classes (cap,cube,playing cards,screwdriver, andtorch).
unzip("MerchData.zip");
Load Pretrained Network
Open Deep Network Designer.
deepNetworkDesigner
SelectSqueezeNetfrom the list of pretrained networks and clickOpen.
Deep Network Designer displays a zoomed-out view of the whole network.
Explore the network plot. To zoom in with the mouse, useCtrl+scroll wheel. To pan, use the arrow keys, or hold down the scroll wheel and drag the mouse. Select a layer to view its properties. Deselect all layers to view the network summary in thePropertiespane.
Import Data
To load the data into Deep Network Designer, on theDatatab, clickImport Data>Import Image Data. The Import Image Data dialog box opens.
In theData sourcelist, selectFolder. ClickBrowseand select the extracted MerchData folder.
Divide the data into 70% training data and 30% validation data.
Specify augmentation operations to perform on the training images. Data augmentation helps prevent the network from overfitting and memorizing the exact details of the training images. For this example, apply a random reflection in the x-axis, a random rotation from the range [-90,90] degrees, and a random rescaling from the range [1,2].
ClickImportto import the data into Deep Network Designer.
Edit Network for Transfer Learning
To retrain SqueezeNet to classify new images, replace the last 2-D convolutional layer and the final classification layer of the network. In SqueezeNet, these layers have the names'conv10'
and'ClassificationLayer_predictions'
, respectively.
On theDesignerpane, drag a newconvolution2dLayer
onto the canvas. To match the original convolutional layer, setFilterSize
to1,1
. EditNumFilters
to be the number of classes in the new data, in this example,5
.
Change the learning rates so that learning is faster in the new layer than in the transferred layers by settingWeightLearnRateFactor
andBiasLearnRateFactor
to10
.
Delete the last 2-D convolutional layer and connect your new layer instead.
Replace the output layer. Scroll to the end of theLayer Libraryand drag a newclassificationLayer
onto the canvas. Delete the original output layer and connect your new layer in its place.
Train Network
To choose the training options, select theTrainingtab and clickTraining Options. Set the initial learn rate to a small value to slow down learning in the transferred layers. In the previous step, you increased the learning rate factors for the 2-D convolutional layer to speed up learning in the new final layers. This combination of learning rate settings results in fast learning only in the new layers and slower learning in the other layers.
For this example, setInitialLearnRateto0.0001
,ValidationFrequencyto5
,MaxEpochsto8
. As there are 55 observations, setMiniBatchSizeto11
to divide the training data evenly and ensure the whole training set is used during each epoch.
To train the network with the specified training options, clickCloseand then clickTrain.
Deep Network Designer allows you to visualize and monitor the training progress. You can then edit the training options and retrain the network, if required.
Export Results and Generate MATLAB Code
To export the results from training, on theTrainingtab, selectExport>Export Trained Network and Results. Deep Network Designer exports the trained network as the variabletrainedNetwork_1
and the training info as the variabletrainInfoStruct_1
.
You can also generate MATLAB code, which recreates the network and the training options used. On theTrainingtab, selectExport>Generate Code for Training. Examine the MATLAB code to learn how to programmatically prepare the data for training, create the network architecture, and train the network.
Classify New Image
Load a new image to classify using the trained network.
I = imread("MerchDataTest.jpg");
Resize the test image to match the network input size.
I = imresize(I, [227 227]);
Classify the test image using the trained network.
[YPred,probs] = classify(trainedNetwork_1,I); imshow(I) label = YPred; title(string(label) +", "+ num2str(100*max(probs),3) +"%");
References
[1]ImageNet. http://www.image-net.org
福勒斯特N。[2]Iandola,歌汉,马修·w·Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size." Preprint, submitted November 4, 2016. https://arxiv.org/abs/1602.07360.
[3] Iandola, Forrest N. "SqueezeNet." https://github.com/forresti/SqueezeNet.
See Also
trainNetwork
|trainingOptions
|squeezenet
|Deep Network Designer
Related Topics
- Try Deep Learning in 10 Lines of MATLAB Code
- Classify Image Using Pretrained Network
- Transfer Learning with Deep Network Designer
- Create Simple Image Classification Network Using Deep Network Designer
- Create Simple Image Classification Network
- Create Simple Sequence Classification Network Using Deep Network Designer
- Generate Experiment Using Deep Network Designer