主要内容

FreeZeparameters.

转换可知的网络参数onnxparameters.非可爱的

    描述

    例子

    params = freezeparameters(参数名称的)冻结由此指定的网络参数名称onnxparameters.目的参数.该函数从指定的参数移动参数个数。可学的在输入参数中参数params.nonlearnables.在输出参数中参数

    例子

    全部收缩

    进口挤压卷积神经网络作为函数和微调预磨阅,通过传输学习,在新的图像集合上进行分类。

    此示例使用多个辅助功能。要查看这些函数的代码,请参阅辅助功能

    将新图像解压并作为图像数据存储加载。ImageageAtastore.根据文件夹名称自动标记图像并将数据存储为ImageageAtastore.目的。图像数据存储使您能够存储大图像数据,包括不适合内存的数据,并在卷积神经网络的培训期间有效地读取批次的图像。指定迷你批次大小。

    解压缩('merchdata.zip');minibatchsize = 8;imds = imageageatastore('merchdata'......'upplyubfolders',真的,......'labelsource''foldernames'......'阅读',小匹匹匹匹配);

    此数据集很小,包含75个培训图像。显示一些样本图像。

    numimages = numel(imds.labels);IDX = RANDPERM(NUMIMAGES,16);数字为了i = 1:16子图(4,4,i)i = ReadImage(IMDS,IDX(I));imshow(i)结尾

    提取培训集和单热编码分类分类标签。

    XTrain = Readall(IMDS);XTrain =单(Cat(4,XTrain {:}));ytrain_categ =分类(IMDS.Labels);YTrain = OneHotencode(Ytrain_Cate,2)';

    确定数据中的类数。

    Classes =类别(Ytrain_Catch);numclasses = numel(类)
    numclasses = 5

    挤压是一个卷积神经网络,从ImageNet数据库中培训超过一百万个图像。因此,该网络已经学习了丰富的特征表示,以获得各种图像。网络可以将图像分为1000个对象类别,例如键盘,鼠标,铅笔和许多动物。

    导入pretrained挤压网络作为函数。

    scriezenetonnx()params = importonnxfunction('screezenet.onnx''squeezenetfcn'的)
    包含导入的OnNX网络的函数已保存到文件SqueezenetFCN.M.要了解如何使用此函数,请键入:帮助squeezenetfcn。
    params =具有属性的onnxparameters:学习栏:[1×1结构]非可爱性:[1×1结构]状态:[1×1结构] NumDimensions:[1×1结构] NetworkFunctionName:'Squeezenetfcn'

    参数是一个onnxparameters.对象,该对象包含网络参数。squeezenetfcn.是包含网络架构的模型函数。importonnxfunction.救赎squeezenetfcn.在当前文件夹中。

    计算新培训集上净化网络的分类准确性。

    准确性触及= GetNetWorkAccuracy(XTrain,Ytrain,Params);FPRINTF(在转移学习前的'%.2F准确性\ n',准确性磨削);
    迁移学习前的准确度为0.01

    精度非常低。

    通过键入显示网络的可读参数参数个数。可学的.这些参数,例如权重(W.)和偏见(B.)的卷积层和全连接层,在训练时由网络更新。在训练过程中,不可学习的参数保持不变。

    预训练网络的最后两个可学习参数配置为1000个类。

    Conv10_w:[1×1×512×1000 dlarray]

    conv10_b:[1000×1 dlarray]

    参数CONV10_W.CONV10_B.必须进行微调新的分类问题。通过初始化参数传输参数以对五类进行分类。

    params.Learnables。CONV10_W.= rand(1,1,512,5); params.Learnables.conv10_B = rand(5,1);

    冻结网络的所有参数将它们转换为非可爱参数。由于您不需要计算冻结层的渐变,因此冻结许多初始层的重量可以显着加速网络训练。

    params = freezeparameters(Params,'全部');

    解冻网络的最后两个参数以将它们转换为可学习参数。

    Params = Unfreezeparameters(Params,'conv10_w');Params = Unfreezeparameters(Params,'conv10_b');

    现在网络已准备好进行培训。初始化培训进度情节。

    plots =.“培训 - 进展”;如果plots ==“培训 - 进展”图线轴杆=动画线;Xlabel(“迭代”) ylabel (“损失”的)结尾

    指定培训选项。

    速度= [];numepochs = 5;minibatchsize = 16;numobservations = size(ytrain,2);numiterationsperepoch =楼层(numobservations./minibatchsize);initiallearnrate = 0.01;势头= 0.9;衰减= 0.01;

    训练网络。

    迭代= 0;start = tic;ExecutionEnvironment =.“中央处理器”;在GPU上培训“GPU”的百分比变为“GPU”。%循环epochs。为了epoch = 1:numepochs%Shuffle数据。idx = randperm(numobservations);XTrain = XTrain(:,:,:,IDX);Ytrain = YTrain(:,IDX);%循环在迷你批次。为了i = 1:numiterationsperepoch迭代=迭代+ 1;%读取迷你批次数据。IDX =(I-1)*小匹匹匹匹匹配+ 1:i *小匹匹配;x = xtrain(::::,IDX);Y = YTRAIN(:,IDX);如果在GPU上培训,则%如果将数据转换为GPUArray。如果(execultenvironment ==.“汽车”&& canusegpu)||executionenvironment ==.“GPU”x = gpuarray(x);结尾%使用dlfeval和dlfeval评估模型渐变和损失%MACEMEGRADENTERS功能。[渐变,损失,状态] = DLFeval(@ MapeStradients,X,Y,Params);params.state =状态;%确定基于时间的衰减学习率计划的学习率。LearnRate = InitialLearnrate /(1 +衰减*迭代);%使用SGDM Optimizer更新网络参数。[Params.Learnables,速度] = SGDMUPDATE(Params.Learnables,梯度,速度);%显示培训进度。如果plots ==“培训 - 进展”d =持续时间(0,0,toc(start),'格式''hh:mm:ss');Addpoints(LineLoStrain,迭代,Double(收集(提取数据(丢失)))标题(“时代:”+ epoch +“,经过:”+字符串(d))绘制结尾结尾结尾

    微调后计算网络的分类准确性。

    ComeascyAfterTraining = GetNetWorkaguracy(XTrain,Ytrain,Params);FPRINTF(“转移学习后的%.2F精度\ n”,精确留下);
    1.00转移学习后的准确性

    辅助功能

    本节提供此示例中使用的辅助功能的代码。

    getnetworkaguracy.功能通过计算分类准确性来评估网络性能。

    功能精度= getnorwworkaguracy(x,y,onnxparams)n = size(x,4);ypred = scrizzenetfcn(x,onnxparams,'训练',错误的);[〜,yidx] = max(y,[],1);[〜,ypredidx] = max(ypred,[],1);numiCorrect = sum(abs(yidx-ypredidx)> 0);精度= 1  -  numiCorrect / n;结尾

    modelGradients功能计算丢失和渐变。

    功能[毕业,丢失,状态] = MapeStradeents(x,y,onnxparams)[y,state] = screezenetfcn(x,onnxparams,'训练',真的);损失=联语(Y,Y,'dataformat''CB');Grad = Dlgradient(亏损,onnxparams.learnables);结尾

    squeezenetonnx.函数生成一个ONNX模型挤压网络。

    功能squeezenetONNX () exportONNXNetwork (squeezenet,'screezenet.onnx');结尾

    输入参数

    全部收缩

    网络参数,指定为一个onnxparameters.目的。参数包含导入的Onnx™模型的网络参数。

    冻结的参数的名称,指定为'全部'或字符串数​​组。通过设置冻结所有学习参数名称'全部'.冻结K.通过定义1-by-中的参数名称来获取学习参数K.字符串数组名称

    例子:'全部'

    例子:[“gpu_0_sl_pred_b_0”,“gpu_0_sl_pred_w_0”]

    数据类型:char|细绳

    输出参数

    全部收缩

    网络参数,作为一个返回onnxparameters.目的。参数包含更新的网络参数FreeZeparameters.

    在R2020B中介绍