精华内容
下载资源
问答
  • 使用matlab迁移学习,可以推荐使用alexnet alexnet可以在matlab 添加app功能中自行下载
  • 了解如何在 MATLAB 中使用迁移学习来重新训练由专家为您自己的数据或任务创建的深度学习网络。 本演示将教您如何使用迁移学习重新训练 AlexNet,这是一种预训练的深度卷积神经网络(CNN 或 ConvNet),可识别热狗、...
  • 基于深度迁移学习的小样本图像分类matlab程序,网络模型基于AlexNet,文件包含了图像数据集,输出结果可靠。
  • matlab官方提供了一个迁移学习示例,看官方文件是学习matlab的最好方法。 https://ww2.mathworks.cn/help/deeplearning/ug/transfer-learning-using-alexnet.html
    展开全文
  • 运用matlab读取手写数字识别数据集,对其分别进行传统机器学习建模和迁移学习建模。对比分析两者性能差异。 工作计划: 准备数据集,进行前期的数据清洗工作,使其转化成机器学习算法能够输入的数据结构。 用传统...
  • matlab实现迁移学习

    千次阅读 2018-11-02 11:55:07
    MATLAB基本操作见:https://blog.csdn.net/wangqianqianya/article/details/83149288 数据集:https://blog.csdn.net/linqianbi/article/details/78626130 train与trainNetwork函数区别: train用于训练...
    
    

    train用于训练浅层神经网络,trainNetwork用于深度学习(用到卷积、LSTM神经网络),它们都是从头开始训练

    • assembleNetwork函数

    集成网络,不用再训练。用于以下情况:

    1、转换其中一层形成可直接用于预测的网络

    2、集合导入的层

    3、修改已训练好的网络的权值

    e.g

    filename = 'digitsDAGnetwithnoise.h5';
    lgraph = importKerasLayers(filename,'ImportWeights',true);
    
    %画出网络层次图
    plot(lgraph)
    title("Imported Network")
    
    %找到占位层
    placeholderLayers = findPlaceholderLayers(lgraph)
    
    %展示这些层的配置
    placeholderLayers.KerasConfiguration
    
    %Assemble Network from Pretrained Keras Layers
    
    %定义自定义的高斯噪声层
    gnLayer1 = gaussianNoiseLayer(1.5,'new_gaussian_noise_1');
    gnLayer2 = gaussianNoiseLayer(0.7,'new_gaussian_noise_2');
    
    %取代.
    lgraph = replaceLayer(lgraph,'gaussian_noise_1',gnLayer1);
    lgraph = replaceLayer(lgraph,'gaussian_noise_2',gnLayer2);
    Plot the updated layer graph using plot.
    
    %画出取代后的层次图
    figure
    plot(lgraph)
    title("Network with Replaced Layers")
    
    %显示各层信息,找到分类层的索引
    lgraph.Layers
    
    cLayer = lgraph.Layers(end)
    
    %默认属性分类方式为auto,所以我们自己制定一个类别表示
    cLayer.Classes = string(0:9)
    
    %取代分类层
    lgraph = replaceLayer(lgraph,'ClassificationLayer_activation_1',cLayer);
    
    %集成之后的网络就可以直接使用了
    net = assembleNetwork(lgraph)  %The function returns a DAGNetwork object that is ready to use for prediction.
    

     

    展开全文
  • 迁移训练在深度学习中是一种非常高效的训练策略。它允许神经网络在已经训练的基础上再次被训练,这样极大的提高了训练效率,缩短了训练时间。这一过程在PyTorch, TensorFlow等平台上可以非常简单的实现,但是在...

    本文介绍了如何在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 == "training-progress"
        figure
        lineLossTrain = animatedline('Color',[0.85 0.325 0.098]);
        ylim([0 inf])
        xlabel("Iteration")
        ylabel("Loss")
        grid on
    end
    
    %Initialize the average gradients and squared average gradients.
    % for transfer learning
    exist averageGrad;
    if ans == 0
        averageGrad = [];
        averageSqGrad = [];
    end
    
    % Train the network.
    
    iteration = 0;
    start = tic;
    for epoch = 1:numEpochs
        % Shuffle data.
    %     idx = randperm(size(XTrain,4));
    %     XTrain = XTrain(:,:,:,idx);
    %     YTrain = YTrain(idx);
        
        for i = 1:numIterationsPerEpoch
            iteration = iteration + 1;
            
            % Read mini-batch of data and convert the labels to dummy
            % variables.
            idx = (i-1)*miniBatchSize+1:i*miniBatchSize;
            X = XTrain(:,:,:,idx);
            Y = YTrain(:,:,:,idx);
    %         Y = zeros(size(YTrain,2),miniBatchSize, 'single');
                    
            % Convert mini-batch of data to a dlarray.
            dlX = dlarray(single(X),'SSCB');
            
            % If training on a GPU, then convert data to a gpuArray.
            if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu"
                dlX = gpuArray(dlX);
            end
            
            % Evaluate the model gradients and loss using dlfeval and the
            % modelGradients helper function.
            [grad,loss] = dlfeval(@modelGradients,new_dlnet,dlX,Y);
            
            % Update the network parameters using the Adam optimizer.
            [new_dlnet,averageGrad,averageSqGrad] = adamupdate(new_dlnet,grad,averageGrad,averageSqGrad,iteration,learnRate,gradDecay,sqGradDecay);
            % Display the training progress.
            if plots == "training-progress"
                D = duration(0,0,toc(start),'Format','hh:mm:ss');
                addpoints(lineLossTrain,iteration,double(gather(extractdata(loss))))
                title("Epoch: " + epoch + ", Elapsed: " + string(D) + ", Loss: " + num2str(double(gather(extractdata(loss)))));
                drawnow
            end
        end
    end
    dlnet = new_dlnet;
    modelDateTime = datestr(now,30);
    
    save_mode_name = ['trained_Unet_' modelDateTime '.mat'];
    save(save_mode_name,'dlnet','averageGrad','averageSqGrad');
    
    

    其实如果是不更改神经网络的结构,每次只需要load(‘trained_Unet_XXX.mat’),然后运行程序即可。
    硬盘空间充裕的话,直接保存工作空间更加方便,运行 训练神经网络的代码就行了。后期我会把如何在两个神经网络之间传递参数专门写一篇帖子。

    补充(23.08.2021)

    之前忽略了modelGradients这个函数的代码,恰巧有些朋友询问,我就在这这里补充一下(其实这个可以在官方文档中找到)

    function [gradients, loss] = modelGradients(dlnet, dlX, T)
    
    % Forward data through the dlnetwork object.
    dlY = forward(dlnet,dlX);
    
    % Compute loss.
    %     loss = crossentropy(dlY,T); % classification 
    loss = mse(dlY,T);	%regression 
    % Compute gradients.
    gradients = dlgradient(loss,dlnet.Learnables);
    
    end
    

    测试

    这里给出了测试代码和结果。因为只是演示,这里直接用训练集来测试。

    
    %% Test Network
    number_of_test = 10;
    XTest = images_32M(:,:,:,1:number_of_test);
    YTest = images_32(:,:,:,1:number_of_test);
    
    dlXTest = dlarray(XTest,'SSCB');
    if (executionEnvironment == "auto" && canUseGPU) || executionEnvironment == "gpu"
        dlXTest = gpuArray(dlXTest);
    end
    tic
    dlYPred = predict(dlnet,dlXTest);
    toc
    prediction_images =  extractdata(dlYPred);
    corr_N = zeros(number_of_test,1);
    for index_test = 1:number_of_test  
        corr_N(index_test) = corr2(prediction_images(:,:,:,index_test),YTest(:,:,:,index_test));
    end
    % plot error
    figure;plot(corr_N);title(num2str(mean(corr_N)))
    template_index = 10;
    figure;
    subplot(2,3,1);imagesc(XTest(:,:,:,template_index));title('Distoted');axis image
    subplot(2,3,2);imagesc(prediction_images(:,:,:,template_index));title(['Prediction ' num2str(corr_N(template_index))]);axis image
    subplot(2,3,3);imagesc(YTest(:,:,:,template_index));title('Ground truth');axis image
    template_index = 7;
    subplot(2,3,4);imagesc(XTest(:,:,:,template_index));title('Distoted');axis image
    subplot(2,3,5);imagesc(prediction_images(:,:,:,template_index));title(['Prediction ' num2str(corr_N(template_index))]);axis image
    subplot(2,3,6);imagesc(YTest(:,:,:,template_index));title('Ground truth');axis image
    
    

    第一个epoch的运行结果
    Loss
    重建的结果,数字是预测和原图的相关性。Comparison
    第儿个epoch的运行结果。可以看到,Loss 从5左右开始下降。
    在这里插入图片描述
    结果也是好于第一个epoch的预测。
    在这里插入图片描述

    展开全文
  • 目录 1 repmat() 2 sum() 3 diag() 3.1 X = diag(v,k) 3.2 v = diag(X,k) 4 ./ .^ .* 5 size() 6 zscore() A = [1 2; 4 5]; B = repmat(A,4,3) Output B = 1 2 1 2 1 ...

    目录

    1 repmat()

    2 sum()

    3 diag()

    3.1 X = diag(v,k)

    3.2 v = diag(X,k)

    4 ./     .^     .*

    5 size()

    6 zscore()


    A = [1 2; 4 5];
    B = repmat(A,4,3)

    Output

    B =
    
         1     2     1     2     1     2
         4     5     4     5     4     5
         1     2     1     2     1     2
         4     5     4     5     4     5
         1     2     1     2     1     2
         4     5     4     5     4     5
         1     2     1     2     1     2
         4     5     4     5     4     5

     

    2 sum()

    b = sum(a) 列求和

    b = sum(a,2) 行求和

    b  = sum(a(:)) 矩阵求和

    Example

    A = [1 2; 4 5];
    b = sum(A)
    c = sum(A,2)
    d = sum(A(:))

    Output

    b =
         5     7
    
    c =
         3
         9
    
    d =
        12
    

     

    3 diag()

    3.1 X = diag(v,k)

    • X为矩阵,v为向量,以v的元素作为矩阵x的第k条对角线,其余位置补0;
    • k=0,对角线;
    • k<0,对角线下方;
    • k>0,对角线上方。

    Example

    v = [1 2 4 5];
    X= diag(v,2)

    Output

    
    X =
    
         0     0     1     0     0     0
         0     0     0     2     0     0
         0     0     0     0     4     0
         0     0     0     0     0     5
         0     0     0     0     0     0
         0     0     0     0     0     0

    3.2 v = diag(X,k)

    X为矩阵,v为向量,取矩阵X的第k条对角线的元素向量v

    Example

    X = [1 2 3; 4 5 6; 7 8 9]
    v = diag(X,-1)

    Output

    
    X =
    
         1     2     3
         4     5     6
         7     8     9
    
    
    v =
    
         4
         8

    4 ./     .^     .*

    ./     .^     .*是对矩阵里每一个元素进行操作。而*  ^  /是对整个矩阵进行操作。

    Example

    X = [1 2 3; 4 5 6; 7 8 9]
    Y1 = X.^2
    Y2 = X^2

    Output

    X =
    
         1     2     3
         4     5     6
         7     8     9
    
    
    Y1 =
    
         1     4     9
        16    25    36
        49    64    81
    
    
    Y2 =
    
        30    36    42
        66    81    96
       102   126   150

    5 size()

    m = size(X,dim)

    返回第dim维的尺寸。

    Example

    X = [1 2 3; 4 5 6]
    m1 = size(X,1)
    m2 = size(X,2)

    Output

    
    X =
    
         1     2     3
         4     5     6
    
    
    m1 =
    
         2
    
    
    m2 =
    
         3

    6 zscore()

    Z = (X-mean(X))./std(X)

     

    Example

    X = [1 2 3; 4 5 6];
    X1 = X./repmat(sum(X,2),1,size(X,2))
    [A,A_mean,A_std] = zscore(X1);
    
    C_mean = mean(X1)
    C_std = std(X1)
    C = (X1-repmat(C_mean,size(X1,1),1))./repmat(C_std,size(X1,1),1)
    
    [B,B_mean,B_std] = zscore(X1,1);

    Output

    从结果可以看出,A和C的结果相同,但是和B不相同。

    X1 =
    
        0.1667    0.3333    0.5000
        0.2667    0.3333    0.4000
    
    
    A =
    
       -0.7071         0    0.7071
        0.7071         0   -0.7071
    
    
    A_mean =
    
        0.2167    0.3333    0.4500
    
    
    A_std =
    
        0.0707         0    0.0707
    
    
    C_mean =
    
        0.2167    0.3333    0.4500
    
    
    C_std =
    
        0.0707         0    0.0707
    
    
    C =
    
       -0.7071       NaN    0.7071
        0.7071       NaN   -0.7071
    
    
    B =
    
       -1.0000         0    1.0000
        1.0000         0   -1.0000
    
    
    B_mean =
    
        0.2167    0.3333    0.4500
    
    
    B_std =
    
        0.0500         0    0.0500
    

     

    展开全文
  • VGG,V3,RESNET迁移学习,tensorflow和keras写的程序
  • 此示例说明如何使用迁移学习对预训练的卷积神经网络 AlexNet 进行重新训练,以对新图像集进行分类。尝试此示例,了解如何在 MATLAB® 中轻松开始深度学习。 深度学习应用中常常用到迁移学习。您可以采用预训练的...
  • MATLAB对Alexnet模型进行迁移学习

    千次阅读 多人点赞 2019-04-05 23:16:32
    在刚开始使用MATLAB进行深度学习时,使用MATLAB自带的深度学习工具箱进行迁移学习,十分方便。对只是使用这个工具的人来说非常便利。我这里采用的是MATLAB关于Alexnet模型的帮助文档,来进行迁移学习。详细可以在...
  • 这是模式识别方向新起的一个领域,即迁移学习,其中包含了迁移学习程序开发所需的底层工具箱。
  • 基于深度迁移学习的小样本图像分类matlab程序,网络模型基于AlexNet,文件包含了图像数据集,输出结果可靠。
  • %如果没有合适的数据集可以使用matlab官方提供的数据集 unzip('MerchData.zip'); %运行这句话后你的工作路径下会多出一个文件夹,里面就是数据集 image = imageDatastore('MerchData','IncludeSubfolders',true,'...
  • MATLAB中使用AlexNet、VGG、GoogLeNet进行迁移学习

    千次阅读 热门讨论 2020-04-04 15:47:06
    title(['overall per image accuracy ',num2str(round(100*PerItemAccuracy)),'%']) MATLAB中训练神经网络一个非常大的优势就是训练过程中各项指标的可视化,并且最终也会生成一个混淆矩阵显示验证集的结果。
  • MATLAB对inceptionV3模型进行迁移学习

    千次阅读 2020-04-01 16:52:51
    使用MATLAB自带的inceptionv3模型进行迁移学习,若没有安装inceptionv3模型支持工具,在命令窗口输入inceptionv3,点击下载链接进行安装。 训练环境:Windows10系统,MATLAB20018b,CPU i3 3.7GHz,4GB内存。 使用...
  • matlab2018a resnet50迁移学习

    千次阅读 2018-05-03 09:38:10
    该函数用来获取数据集(data_resize是我的文件名,训练时修改即可)function [dataTrain,dataTest] = merchData() % unzip(fullfile(matlabroot,'examples','nnet','MerchData.zip')); data = imageDatastore('...
  • matlab下使用预训练模型Alex Net进行迁移学习的实验与分析 摘要: 针对预训练模型对于个性化图片分类准确度很低,应用了迁移学习的方法,在训练集照片达到30张时,在测试集上就能达到80以上的正确率。 一:研究...
  • 本篇文章实现的是下载alexnet支持包,使用alexnet迁移学习,使用alexnet对图像进行分类,使用alexnet提取特征。 AlexNet是一个深达8层的卷积神经网络。您可以从ImageNet数据库加载经过一百万个图像训练的网络的预...
  • 它允许用户在 GUI 中对预训练的神经网络、导入的 ONNX 分类模型或导入的 MAT 文件分类模型进行迁移学习,而无需编码。 除了使用现有模型,用户还可以使用 Deep Network Designer(MATLAB 内置应用程序)设计他们的...
  • matlab下使用预训练模型Alex Net进行迁移学习的实验与分析 摘要: 针对预训练模型对于个性化图片分类准确度很低,应用了迁移学习的方法,在训练集照片达到30张时,在测试集上就能达到80以上的正确率。 一:研究...
  • MATLAB对Googlenet模型进行迁移学习

    千次阅读 热门讨论 2019-04-26 15:33:04
    调用MATLAB中的Googlenet工具箱进行迁移学习。 %% 加载数据 clc;close all;clear; Location = '';%这里输入自己的数据集 unzip('MerchData.zip'); imds = imageDatastore('MerchData',... %若使用自己的数据集则改为...
  • 半监督学习,迁移学习Matlab算法 文件内容:calculate_A_b.mconfidence.mfindTargetLVQ.mfindTargetQDF.mmain.mmultiSourceClassifier.mREADME.mdsemiSupervisedSTM.m
  • import os import numpy as np import tensorflow as tf from scipy import io ...基于数据集17类花,基于预训练VGG19模型进行迁移学习。 # mat 是值MATLAB 的数据特征存储 权重地址: http://www.vlfeat.o...
  • 由于深度学习网络的训练复杂,耗时,并且对硬件要求较高,因此对于目标相似的任务,并且自己的数据集数目较小的时候,比如分类任务,不同的分类任务之间的对象具有较为相似的特征,我们就可以使用已经预训练的模型来...
  • alexnet第一层输入修改为227*227*1,输入黑白图片 解决了有些人的需求问题
  • 本程序基于VGG16的进行迁移学习,通过训练自己的数据集实现三分类,通过冻结原网络的特征提取层,使卷积层和池化层的权重保持不变。由于待分类的数据与原先 VGG16 的分类数据不同,删除原来的全连接层,在特征提取层...
  • 利用VGG16网络模块进行迁移学习,实操(附源码)-附件资源
  • 从操作系统或在MATLAB中打开darknet53.mlpkginstall文件将启动您所拥有版本的安装过程。 该mlpkginstall文件可用于R2020a及更高版本。 用法示例: %访问训练有素的模型净= darknet53(); %查看架构细节网络...
  • 迁移学习:微调

    2020-06-09 16:47:00
    场景: 假设我们想从图像中识别不同种类的椅子,然后将购买链接推荐给用户,一种可能的方法是: (1) 先找出100中常见的椅子,然后对椅子从各个角度进行拍照;...(2) 迁移学习:从源数据集上学到的知识迁移到目标数

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,357
精华内容 942
关键字:

matlab迁移学习

matlab 订阅