精华内容
下载资源
问答
  • “推荐一个实用的Matlab迁移学习工具箱。”【编者按语】现有表现比较好的监督学习需要大量标注数据,而标注数据是一项枯燥无味且花费巨大的任务,伴随越来越多的机器学习应用场景的出现,迁移学习最近受到研究者...

     推荐一个实用的Matlab迁移学习工具箱。

    d857ad060a08d637c343939d1d2e19ce.png

    a9c18f200b84ef2cd167e3786533b299.png

    【编者按语】

    现有表现比较好的监督学习需要大量标注数据,而标注数据是一项枯燥无味且花费巨大的任务,越来越多的机器学习应用场景的出现迁移学习最近受到研究者越来越多的关注。

    如何充分利用之前标注好的数据(废物利用),同时又保证在新的任务上的模型精度呢?

    28f9027b48ba7486b3242f37682b152c.png

    基于这样的问题,迁移学习的研究逐渐成为新的热点。

    本期介绍一个GUI小工具!

    下载地址:

    https://www.mathworks.com/matlabcentral/fileexchange/70293-transfer-learning

    603e9441f6eb67ffb0bec51cd3e1b09c.png

    Transfer Learning

    by Kevin Chng

    Transfer Learning of Pre-trained Neural Network or Imported ONNX Classification Model in GUI

    本工具允许用户在GUI中使用预先训练好的神经网络,导入的ONNX分类模型或MAT文件分类模型的转移学习,而无需再度编码。 

    除使用现有模型外,用户还可以使用Deep Network Designer(MATLAB内置应用程序)设计神经网络,然后再使用此应用程序来训练神经网络。 

    用户可以在此Apps中分析预先训练的网络或导入的网络。它还允许用户修改图像增强器信息和训练选项(超参数)。

    一旦完成了网络训练,用户就可以将训练后的网络导出到工作区,MAT文件,ONNX文件,并为应用程序中正在执行的步骤生成MATLAB代码。 

    用户可以生成NVIDIA GPU CUDA代码,但是它不支持导入的ONNX模型。

    快去看看吧!

    97766d05613fcdeccd532f4af1321c94.png

    It allows user to do transfer learning of pre-trained neural network, imported ONNX classification model or imported MAT file classification model in GUI without coding. Other than using the existing model, user can design their neural network using Deep Network Designer (MATLAB built-in application) and later use this app to train the neural network. User can analyze the pre-trained network or imported network in this app. It also allows user to modify the image augmenter information and training option (hyperparameters). Once completed the training of network, user may export the trained network to workspace, MAT file, ONNX file and generate MATLAB code for the steps being done in the application. User can generate NVIDIA GPU CUDA Code, however it is not supporting imported ONNX model.

    目前包含的预置模型包含以下20个模型:

    Pre-trained Neural Network available :

    1) alexnet

    2) googlenet(ImageNet)

    3) goolgenet(Places365)

    4) resnet18

    5) resnet50

    6) resnet101

    7) vgg16

    8) vgg19

    9) inceptionv3

    10) inceptionresnetv2

    11) squeezenet

    12) densenet201

    13) mobilenetv2

    14) shufflenet

    16) xception

    17) nasnetmobile

    18) nasnetlarge

    19) import ONNX model

    20) import mat file model

    [Up to R2019a, imported ONNX layer is not supporting generation of CUDA code]

    How to design & train neural network using this app?

    https://www.youtube.com/watch?v=-GeZa6IL2QA

    下载地址:

    https://www.mathworks.com/matlabcentral/fileexchange/70293-transfer-learning

    603e9441f6eb67ffb0bec51cd3e1b09c.png

    a00f49fbcd00f7ccf34ab4d464ae72ea.png

    634ed487df6a0e5e7ee5cb7b4a2d1326.png

    940f5e55e0b95e45c01a286f3c79fe6a.gif

    喜欢就点个在看吧!

    展开全文
  • 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.
    

     

    展开全文
  • 使用matlab迁移学习,可以推荐使用alexnet alexnet可以在matlab 添加app功能中自行下载
  • Python 机器学习——线性代数和矩阵运算 从matlab迁移到python

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                         
     

    诚然,没有一门语言能够撼动matlab的矩阵或科学计算在学术圈的地位,因其简洁的语法(matrix是其基本数据类型),因其矩阵运算的便捷,因其术业有专攻(matlab:为科学计算而生),因其名字matlab:matrix laboratory,所在的公司名mathworks:math works。我在写过一些matlab和python的代码之后,油然发过一句感慨“没有一门语言能比matlab还更具数学感”。然而,因为numpypandasmatplotlib 等一众优秀的开发者(不排除从matlab阵营溜出来的)贡献的一众优秀的开源的库,让python具备了和matlab一样的功能,为工程而生的python从此因为有了数学家的参与就相当初的matlab一样,也学术起来,工程学术通吃。

    本文试图回答的问题包括:

    • 为什么矩阵运算要从matlab迁移到python?
    • 如何进行迁移,其中会涉及哪些基本编程理念的差异?
    • 迁移的过程中需要注意哪些细节?

     

    python矩阵运算,更准确地说,是numpy矩阵运算,为了更为方便地使用numpy库,如下文使用的那样,我们需要导入numpy库并重命名为np

    import numpy as np
    • 1

    零、编程理念的对比

    0.1 编程范式

    matlab是面向过程的编程方式,而python既支持面向过程又支持面向对象,是一种多范式(multi paradigms)的编程语言。因此,不难理解python编程语言中广泛存在的以下的两种等价实现方式:

    np.dot(X, w)    # 调用全局函数,面向过程的编程方式X.dot(w)        # 调用对象的成员函数,面向对象的编程方式
    • 1
    • 2

    0.2 matlab从1开始计数,python从0开始

    0.2.1 对矩阵而言:

    r = size(A, 1);         % 表示的是行数c = size(A, 2);         % 表示的是列数i = 0:size(A, 1) - 1;A(i, :)             % error: 矩阵的下标索引必须是正整数类型(>=1)或逻辑类型(true/false)
    • 1
    • 2
    • 3
    • 4

    0.2.2 对python而言:

    A.shape[0]      # 行数, axis = 0A.shape[1]      # 列数,   axis = 1# 等价的(或者叫面向过程的)表达方式np.shape(A)[0]np.shape(A)[1]# 可从0开始索引矩阵的行r = A.shape[0]A[0:r, :]
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    0.3 matlab矩阵索引用的是小括号,python是中括号

    小括号对于一种支持面向对象、支持运算符重载的语言来说,具有特别的意义,重载括号运算符是仿函数实现的命门。如果了解c++的运算符重载机制,一个类如果重载了括号运算符,便可称作仿函数,把一个类当做函数来使用。恰好,python也支持运算符重载。

    class Prob(object):    def __init__(self, lhs):        self.lhs = lhs    def __call__(self, rhs):        return self.lhs * rhs    # def __call__(self, lhs, rhs)    #   return lhs * rhsif __name__ == '__main__':    p = Prob(2)     # 调用的是类构造函数,也即__init__    print(p(5))     # 调用的是实例的括号运算符,也即__call__
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    0.4 切片的端点值

    matlab中的切片(也即:表达式),是包含两个端点值的,也即是一个闭区间

    1:5     % 1, 2, 3, 4, 5
    • 1

    而python中的切片是一个左闭右开的区间:

    A[0:2, :]   # 索引的是第零行和第一行,而不包括第二行
    • 1

    0.5 维度的顺序

    % matlab>> zeros(2, 3, 4)ans(:,:,1) =   0   0   0   0   0   0ans(:,:,2) =   0   0   0   0   0   0ans(:,:,3) =   0   0   0   0   0   0ans(:,:,4) =   0   0   0   0   0   0
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    # python>>> np.zeros((2, 3, 4))array([[[ 0.,  0.,  0.,  0.],        [ 0.,  0.,  0.,  0.],        [ 0.,  0.,  0.,  0.]],       [[ 0.,  0.,  0.,  0.],        [ 0.,  0.,  0.,  0.],        [ 0.,  0.,  0.,  0.]]])
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    所以如果一幅256×256d维增广到1+d维的情况(每个输入的第一维值为1):

    N = 100, d = 5X = np.random.randn(N, d)x0 = np.ones((X.shape[0], 1))X = np.concatenate((x0, X), axis=1)
    • 1
    • 2
    • 3
    • 4

    1.9 向量(矩阵)层叠

    1.9.1 matlab/octave

    a = [1, 2, 3]b = [4, 5, 6]c = [a', b']c = [a; b]
    • 1
    • 2
    • 3
    • 4

    1.9.2 python

    a = np.array([1, 2, 3])b = np.array([4, 5, 6])np.c_[a, b]                 # c_: column    array([[1, 4],       [2, 5],       [3, 6]])np.r_[a, b]                 # r_: row    array([1, 2, 3, 4, 5, 6])
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二、 几种特殊矩阵

    2.1 随机矩阵(均匀分布)

    2.1.1 matlab/octave

    rand(3, 2)
    • 1

    2.1.2 python

    np.random.rand(3, 2)
    • 1
     

    无论是matlab中的rand()函数,还是numpy.random中的rand()函数,生成的随机数都是服从[0-1]的均匀分布(uniformed distributed),如何生成任意区间的随机数呢?例[2, 5]区间上的随机数 2*rand()+3

    2.2 0矩阵, 全一矩阵,单位矩阵

     

    符合大小的0矩阵,常常用以申请空间,初始化矩阵, 预先分配内存,提高执行的速度

    2.2.1 matlab/octave

    zeros(3, 2)ones(3, 2)eye(3)
    • 1
    • 2
    • 3

    2.2.2 python

    np.zeros((3, 2))np.ones((3, 2))np.eye(3)
    • 1
    • 2
    • 3

    2.3 对角矩阵

    2.3.1 matlab/octave

    a = [1, 2, 3]diag(a)diag(diag(a)    % [1, 2, 3]
    • 1
    • 2
    • 3

    2.3.2 python

    a = np.array([1, 2, 3])np.diag(a)np.diag(np.diag(a))     % array([1, 2, 3])
    • 1
    • 2
    • 3

    三、 矩阵运算

    3.1 矩阵与标量运算

    3.1.1 matlab/octave

    A = [1, 2, 3; 4, 5, 6; 7, 8, 9]A*2A+2A-2A/2         % 最后统统转换为A中的每一个元素(element-wise)同标量的运算
    • 1
    • 2
    • 3
    • 4
    • 5

    3.1.2 python

    A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])A*2A/2A-2A+2
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 矩阵与矩阵运算

     

    无论是matlab中的乘法运算(*),还是numpy中的np.dot()运算,本质上执行的都是矩阵的乘法运算,都需要满足矩阵A的列数等于矩阵B的行数。

    3.2.1 matlab/octave

    A = [1, 2, 3; 4, 5, 6]  % 2*3B = [1, 2; 3, 4; 5, 6]  % 3*2A*B
    • 1
    • 2
    • 3

    3.2.2 python

    A = np.array([[1, 2, 3], [4, 5, 6]])B = np.array([[1, 2], [3, 4], [5, 6]])A.dot(B)    # np.dot(A, B)
    • 1
    • 2
    • 3

    3.3 矩阵与向量运算

     

    矩阵与向量的乘积,是矩阵与矩阵乘积的特例

    3.4 按位矩阵与矩阵运算

    3.4.1 matlab/octave

    A.*AA.+AA.-AA./AA.^A
    • 1
    • 2
    • 3
    • 4
    • 5

    3.4.2 python

    A*AA+AA-AA/A
    • 1
    • 2
    • 3
    • 4
    • 5

    3.5 矩阵元素的幂乘

    3.5.1 matlab/octave

    A.^2
    • 1

    3.5.2 python

    np.power(A, 2)
    • 1

    3.6 矩阵的幂乘

     

    方阵才有幂乘运算

    3.6.1 matlab/octave

    A^2
    • 1

    3.6.2 python

    np.linalg.matrix_power(A, 2)
    • 1

    3.7 矩阵转置

    3.7.1 matlab/octave

    A'
    • 1

    3.7.2 python

    A.T
    • 1

    3.8 矩阵行列式

    3.8.1 matlab/octave

    det(A)
    • 1

    3.8.2 python

    np.linalg.det(A)
    • 1

    3.9 矩阵求逆

    3.9.1 matlab/octave

    inv(A)
    • 1

    3.9.10 python

    A_inv = np.linalg.inv(A)assert(np.dot(A, A_inv).all() == (np.eye(2)).all()) 
    • 1
    • 2

    3.10 计算矩阵协方差矩阵

     

    协方差矩阵刻画的是属性间的关系,标准协方差矩阵的求法:

       
       

    协方差(i,j)=(第i列所有元素-第i列均值)*(第j列所有元素-第j列均值)/(样本数-1)(分母减去1是为了实现无偏估计)

     

    3.10.1 matlab/octave

    >> x1 = [4.0000 4.2000 3.9000 4.3000 4.1000]’>> x2 = [2.0000 2.1000 2.0000 2.1000 2.2000]'>> x3 = [0.60000 0.59000 0.58000 0.62000 0.63000]’>> cov( [x1,x2,x3] )ans =   2.5000e-02   7.5000e-03   1.7500e-03   7.5000e-03   7.0000e-03   1.3500e-03   1.7500e-03   1.3500e-03   4.3000e-04
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.10.1 python

    >> x1 = np.array([ 4, 4.2, 3.9, 4.3, 4.1])>> x2 = np.array([ 2, 2.1, 2, 2.1, 2.2])>> x3 = np.array([ 0.6, 0.59, 0.58, 0.62, 0.63])>> np.cov([x1, x2, x3])array([[ 0.025  ,  0.0075 ,  0.00175],       [ 0.0075 ,  0.007  ,  0.00135],       [ 0.00175,  0.00135,  0.00043]])
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.11 计算特征值和特征向量

    3.11.1 matlab/octave

    [eig_vec, eig_val] = eig(A)
    • 1

    3.11.2 python

    eig_val, eig_vec = np.linalg.eig(A)
    • 1

    3.12 生成高斯分布的数据集

    3.12.1 matlab/octave

    mu = [0, 0]cov = [2, 0; 0, 2]X = mvnrnd(mu, cov, 1000)
    • 1
    • 2
    • 3

    3.12.2 python

    mu = np.array([0, 0])cov = np.array([[2, 0], [0, 2]])X = np.random.multivariate_normal(mu, cov, 100)
    • 1
    • 2
    • 3

    四、 numpy中的matrix与array对比

    虽然numpy也存在matrix类型,且matrix语法更类似与matlab中的矩阵运算,而numpy中的数组,进行矩阵运算时,和matlab中的用法存在较大的差异,比如matlab中的*表示矩阵相乘,numpy中的数组却表示按位相乘。但绝大多数人仍然推荐numpy中的数组,因为numpy中的绝大多数函数的返回类型都是numpy.ndarray(),如果坚持使用numpy中的matrix类型的话,需要进行繁琐的类型转换(np.mat(A))。

    关于矩阵运算从python到matlab的迁移,更详细的信息请见:http://wiki.scipy.org/NumPy_for_Matlab_Users

               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • MATLAB对Alexnet模型进行迁移学习

    千次阅读 热门讨论 2019-04-05 23:16:32
    在刚开始使用MATLAB进行深度学习时,使用MATLAB自带的深度学习工具箱进行迁移学习,十分方便。对只是使用这个工具的人来说非常便利。我这里采用的是MATLAB关于Alexnet模型的帮助文档,来进行迁移学习。详细可以在...

    在刚开始使用MATLAB进行深度学习时,使用MATLAB自带的深度学习工具箱进行迁移学习,十分方便。对只是使用这个工具的人来说非常便利。我这里采用的是MATLAB关于Alexnet模型的帮助文档,来进行迁移学习。
    使用训练好的Alexnet模型进行分类查看:MATLAB调用训练好的Alexnet模型进行分类测试

    %% 加载数据集
    unzip('MerchData.zip')
    %unzip 提取zip文件的内容
    %Location = 'E:\Image_Set';%使用自己的数据集进行训练
    imds = imageDatastore('MerchData', ...%若使用自己的数据集,将其改为Location
        'IncludeSubfolders',true, ...
        'LabelSource','foldernames');
    %imageDatastore 图像数据的数据存储   /...续行
    %   imds = imageDatastore(location,Name,Value)
    %   location-要包括在数据存储中的文件或文件夹
    %   Name-相对组参数
    %     'IncludeSubfolders'-子文件夹包含标记
    %          ture or false  | 0 or 1  (逗号隔开)
    %          ————指定ture可包含每个文件夹中的所有文件和子文件夹,指定false则仅包含每个文件夹中的文件
    %      'FileExtensions'-图像文件扩展名
    %      'AlternateFileSystemRoots'-备用文件系统根路径
    %       'LabelSource'-提供标签数据的源
    %             指定为以逗号分隔的对组,如果指定了'none',则Labels属性为空。如果指定了'foldernames',将根据文件夹名称分配标签并
    %              存储在Labels属性中 
    
    [imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');%随机拆分imds中的文件,前70%放入imdsTrain中,剩余30%翻入imdsValidation中
    %  splitEachLabel-按比例拆分ImageDatastor标签
    %  [imds1,imds2] = splitEachLabel(imds,p)
    %       可将imds中的图像文件拆分为两个新的数据存储,imds1和imds2.新的数据存储imds1包含每个标签前百分之p个文件,imds2中包含剩余的文件
     
    numTrainImages = numel(imdsTrain.Labels);%numel数组中的元素数目
    
    %随机显示数据集中的图像
    % idx = randperm(numTrainImages,16);
    % % randperm——随机置换
    % %   p = randperm(n,k)返回行向量,其中包含1到n自检随机选择的k个唯一整数
    % figure
    % for i = 1:16
    %     subplot(4,4,i)
    %     I = readimage(imdsTrain,idx(i));
    % %     img = readimage(imds,i)——从数据存储imds中读取地i个图像文件并返回图像数据img
    %     imshow(I)
    % end
    
    %% 加载预训练网络
    Alexnet_Train = alexnet;
    %net.Layers   %展示这个网络架构,这个网络有5个卷积层和3个全连接层
    inputSize = Alexnet_Train.Layers(1).InputSize;  
    %  第一层是图像输入层,要求输入图像的尺寸为227*227*3 这里的3是颜色通道的数字
    
    %% 替换最后三层
    layersTransfer = Alexnet_Train.Layers(1:end-3);
    % Extract all layers, exceptthe last three ,from the pretrained network
    % 预处理网络的最后三层被配置为1000个类。这三层必须针对新的分类问题进行调整
    numClasses = numel(categories(imdsTrain.Labels));%数据集中类的数目
    layers = [
        layersTransfer
        fullyConnectedLayer(numClasses,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
        softmaxLayer
        classificationLayer];
    %    Transfer the layers to the new classification task by replacing the last three layers with a fully connected layer,
    %a softmax layer, and a classification output layer. Specify the options of the new fully connected layer according 
    %to the new data. Set the fully connected layer to have the same size as the number of classes in the new data. 
    %To learn faster in the new layers than in the transferred layers, increase the WeightLearnRateFactor and 
    %BiasLearnRateFactor values of the fully connected layer.
    %     通过将最后三个图层替换为完全连接图层,softmax图层和分类输出图层,将图层转移到新的分类任务。根据新的数据指定新的完全连接层的
    % 选项。将完全连接层设置为与新数据中的类数大小相同。要在新层中比传输层更快的学习,增加完全连接层的WeightLearnRateFactor 和 
    % BiasLearnRateFactor的值
    
    
    %% 训练网络
    
    %用于数据增强,增加数据量
    %    The network requires input images of size 227-by-227-by-3, but the images in the image datastores have different sizes. 
    % Use an augmented image datastore to automatically resize the training images. Specify additional augmentation operations 
    % to perform on the training images: randomly flip the training images along the vertical axis, and randomly translate them up 
    % to 30 pixels horizontally and vertically. Data augmentation helps prevent the network from overfitting and memorizing the exact details of the training images.  
    %   这个网络要求的尺寸是227*227*3,但是在图像存储中的图像有不同的尺寸,使用增强数据存储自动调整训练图像大小。在训练图像中指定
    % 额外的增强操作:沿着垂直轴随机翻转训练图像,水平和垂直随机移动30个像素单位
    pixelRange = [-30 30];
    imageAugmenter = imageDataAugmenter( ...
        'RandXReflection',true, ...
        'RandXTranslation',pixelRange, ...
        'RandYTranslation',pixelRange);
    % imageDataAugmenter——配置图像数据扩充
    % aug = imageDataAugmenter(Name,Value)
    %  RandXReflection——左右方向的随机反射,当为真(ture/1)时每个图像都以50%的概率随机反射,当为假(falsw/0)时,不会反射图像
    %  RandYReflection——上下方向的随机反射,当为真(ture/1)时每个图像都以50%的概率随机反射,当为假(falsw/0)时,不会反射图像
    %  RandRotation——随机旋转
    %       'RandRotation',[num1 num2]第二个元素必须大于等于第一个元素,角度从指定间隔内的连续均匀分布中随机选取
    %  RandScale——均匀标度范围(应用于输入图像的均匀(各向同性)缩放范围)
    %       'RandScale',[num1 num2]第二个元素必须大于等于第一个元素,比例因子从指定间隔内的连续均匀分布中随机选取
    %  RandXScale——均匀标度范围(应用于输入图像的水平缩放范围)
    %       'RandXScale',[num1 num2]第二个元素必须大于等于第一个元素,比例因子从指定间隔内的连续均匀分布中随机选取
    %  RandYScale——均匀标度范围(应用于输入图像的垂直缩放范围)
    %       'RandYScale',[num1 num2]第二个元素必须大于等于第一个元素,比例因子从指定间隔内的连续均匀分布中随机选取
    %  RandXShear——水平剪切范围
    %       'RandXShear',[num1 num2]第二个元素必须大于等于第一个元素,水平剪切角从指定间隔内的连续均匀分布中随机选取
    %  RandYShear——垂直剪切范围
    %       'RandYShear',[num1 num2]第二个元素必须大于等于第一个元素,垂直剪切角从指定间隔内的连续均匀分布中随机选取
    %  RandXTranslation——水平转换范围
    %       'RandXTranslation',[num1 num2]第二个元素必须大于等于第一个元素,水平平移距离从指定间隔内的连续均匀分布中随机选取
    %  RandYTranslation——垂直转换范围
    %       'RandYTranslation',[num1 num2]第二个元素必须大于等于第一个元素,垂直平移距离从指定间隔内的连续均匀分布中随机选取
    
    
    augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ...
        'DataAugmentation',imageAugmenter);
    % augmentedImageDatastore——将批处理转化为增强图像数据
    % DataAugmentation——图像数据扩充
    
    % To automatically resize the validation images without performing further data augmentation, use an augmented image datastore 
    %without specifying any additional preprocessing operations.
    %  自动调整验证图像大小而不进行其他数据增强。使用扩充图像数据存储而不指定其他预处理操作。
    augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
    
    
    %   Specify the training options. For transfer learning, keep the features from the early layers of the pretrained network (the transferred layer weights). 
    %To slow down learning in the transferred layers, set the initial learning rate to a small value. In the previous step, you increased the learning rate factors 
    %for the fully connected 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. When performing transfer learning, you do not need to train for as many epochs. An epoch is a full training cycle 
    %on the entire training data set. Specify the mini-batch size and validation data. The software validates the network every ValidationFrequency iterations during training.
    %     指定训练选项,对于传输学习保留来自预训练网络早期层中的特征。为了延缓在传输层中的学习,将初始学习速率设置为一个小值。在前一步中
    % 增加了完全连接层的学习因子去加速新的最终层中的学习。这种学习速率的结合会导致新层中学习速度加快,其他层中学习速度变慢。在进行转换学习时
    % 你不需要这么多的时间段进行训练。一个时间段是整个训练数据集上的完全训练循环。指定最小批量和验证数据。软件在训练期间每次验证迭代都会验证网络
    options = trainingOptions('sgdm', ...
        'MiniBatchSize',10, ...
        'MaxEpochs',6, ...
        'InitialLearnRate',1e-4, ...
        'ValidationData',augimdsValidation, ...
        'ValidationFrequency',3, ...
        'ValidationPatience',Inf, ...
        'Verbose',true,...
        'Plots','training-progress');
    % trainingOptions——深度学习神经网络训练选项
    % 语法——options = trainingOptions(solverName,Name,Value)
    %      solverName——训练网络检算器
    %            'sgdm'——使用随机梯度下降动量(SGDM)优化器。
    %            'rmsprop'——使用RMSProp优化器
    %             'adam'——使用adam优化器
    %    绘图和显示
    %       'plots'——在网络训练时显示的图
    %           'none'or'default'    在训练时期不显示图
    %           'taining-progress'    显示训练过程。这个图显示了最小批量损失和准确性,验证损失和准确性,和训练过程中的额外信息。对训练过程的更多信息,查看Monitor Deep Learning Training Progress.            
    % Verbose——显示训练过程信息指示器
    % MaxEpochs——最大训练周期数
    %        用于训练的最大周期数,   'MaxEpochs',正整数             
    % MiniBatchSize——最小批量的大小
    %        用于每个训练迭代的小批量大小   'MiniBatchSize',正整数    小批量是训练集的一个子集,用于评估损失函数的梯度并更新权重
    % ValidationData——训练期间用于验证的数据
    % ValidationFrequency——网络验证频率
    %        以迭代次数表示网络验证频率     'ValidationFrequency',正整数
    % ValidationPatience——停止验证的patience
    %          'ValidationPatience',inf or 正整数      若使用默认inf训练将在最大的epoch数后停止
    % InitialLearnRate——初始学习率
    %          'InitialLearnRate',正数    'sgdm'解算器的默认值为0.01,'rmsprop' 'adam' 解算器的默认值为0.001.
    %            如果学习率太低,那么培训需要很长时间,如果学习率太高那么训练可能达不到最佳结果或出现分歧
    
    
    
    Train = trainNetwork(augimdsTrain,layers,options);
    % trainNetwork——训练神经网络进行深度学习
    
    %% 验证训练好的模型
    [YPred,scores] = classify(Train,augimdsValidation);
    % classify——使用经过训练的神经网络对数据进行分类
    idx = randperm(numel(imdsValidation.Files),6);
    % randperm——随机置换
    %      p = randperm (n,k) 返回行向量,其中包含1到n之间随机选择k个唯一整数
    
    %随机显示使用训练好的模型进行分类的图片及其标签和概率
    figure
    for i = 1:6
        subplot(2,3,i)
        I = readimage(imdsValidation,idx(i));
        imshow(I)
        label = YPred(idx(i));
        title(string(label) + "," + num2str(100*max(scores(idx(i),:)),3) + "%");
    end
    
    
    YValidation = imdsValidation.Labels;
    accuracy = mean(YPred == YValidation);
    disp(['accuracy:',num2str(accuracy)]); % 输出预测精度结果
    
    %% 保存训练好的模型
    save Alexnet_01 Train;
    
    
    展开全文
  • MATLAB的Alexnet迁移学习实现自己数据库的图像识别.rar
  • 目录前言一、利用现成网络进行分类二、构建简单的分类网络三、迁移学习前言Matlab从2016a版本开始提供了深度学习的相关工具,可以很方便地构建自己的网络或下载一些现成的经典网络(如AlexNet,GoogLeNet和VGG系列)...
  • 使用matlab在alexnet上迁移学习训练mnist安装matlab r2018b下载mnist数据集 安装matlab r2018b 安装过程参照这篇博客(侵删) 下载mnist数据集
  • 使用MATLAB自带的inceptionv3模型进行迁移学习,若没有安装inceptionv3模型支持工具,在命令窗口输入inceptionv3,点击下载链接进行安装。 训练环境:Windows10系统,MATLAB20018b,CPU i3 3.7GHz,4GB内存。 使用...
  • MATLAB对Squeezenet模型进行迁移学习

    千次阅读 热门讨论 2019-05-09 21:13:18
    使用MATLAB自带的Squeezenet模型进行迁移学习,若没有安装Squeezenet模型支持工具,在命令窗口输入squeezenet,点击下载链接进行安装。 训练环境:Windows10系统,MATLAB20018b,CPU i3 3.7GHz,4GB内存。 使用...
  • 目录 前言 一、利用现成网络进行分类 ...三、迁移学习 前言 Matlab从2016a版本开始提供了深度学习的相关工具,可以很方便地构建自己的网络或下载一些现成的经典网络(如AlexNet,GoogLeNet和VGG...
  • MATLAB对Googlenet模型进行迁移学习

    千次阅读 热门讨论 2019-04-26 15:33:04
    调用MATLAB中的Googlenet工具箱进行迁移学习。 %% 加载数据 clc;close all;clear; Location = '';%这里输入自己的数据集 unzip('MerchData.zip'); imds = imageDatastore('MerchData',... %若使用自己的数据集则改为...
  • matlab2018a resnet50迁移学习

    千次阅读 2018-05-03 09:38:10
    该函数用来获取数据集(data_resize是我的文件名,训练时修改即可)function [dataTrain,dataTest] = merchData() % unzip(fullfile(matlabroot,'examples','nnet','MerchData.zip')); data = imageDatastore('...
  • 基于深度迁移学习的小样本图像分类matlab程序,网络模型基于AlexNet,文件包含了图像数据集,输出结果可靠。
  • 诚然,没有一门语言能够撼动matlab的矩阵或科学计算在学术圈的地位,因其简洁的语法(matrix是其基本数据类型),因其矩阵运算的便捷,因其术业有专攻(matlab:为科学计算而生),因其名字matlab:matrix ...
  • 此示例说明如何使用迁移学习对预训练的卷积神经网络 AlexNet 进行重新训练,以对新图像集进行分类。尝试此示例,了解如何在 MATLAB® 中轻松开始深度学习。 深度学习应用中常常用到迁移学习。您可以采用预训练的...
  • matlab下使用预训练模型Alex Net进行迁移学习的实验与分析 摘要: 针对预训练模型对于个性化图片分类准确度很低,应用了迁移学习的方法,在训练集照片达到30张时,在测试集上就能达到80以上的正确率。 一:研究...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

matlab迁移学习

matlab 订阅