精华内容
下载资源
问答
  • 训练神经网络的五大算法

    千次阅读 2016-11-13 18:13:49
  • 如何调用MATLAB训练神经网络生成的网络进行预测

    千次阅读 多人点赞 2020-06-01 20:59:12
    如何调用MATLAB训练神经网络生成的网络问题引出知识准备代码注解 问题引出 如何存储和调用已经训练好的神经网络。 本人前几天在智能控制学习的过程中也遇到了这样的问题,在论坛中看了大家的回复,虽然都提到了关键...

    如何调用MATLAB训练神经网络生成的网络进行预测

    问题引出

    如何存储和调用已经训练好的神经网络。
    本人前几天在智能控制学习的过程中也遇到了这样的问题,翻阅书本只有对网络直接调用,而没有保存训练结果比较好的网络进行数据的预测,然后进行网上查阅在论坛中看了大家的回复,虽然都提到了关键的两个函数“save”和“load”,但或多或少都简洁了些,让人摸不着头脑(当然也可能是本人太菜)。通过不断调试,大致弄明白这两个函数对神经网络的存储。下面附上实例给大家做个说明,希望对跟我有一样问题的朋友有所帮助。

    知识准备

    如果只是需要在工作目录下保到当前训练好的网络,可以在命令窗口
    输入:save name net %name为保存的文件名字,net为已训练好的网络
    保存net。
    然后在命令窗口
    输入:load name net %name为加载的文件名字,net为已保存的网络
    加载net。

    但一般我们都会在加载完后对网络进行进一步的操作,建议都放在M文件中进行保存网络和调用网络的操作。

    代码注解

    下面展示 BP神经网络的保存网络net和保存归一化最值

    %% 清空环境变量
    clc
    clear
    %% 训练数据预测数据提取及归一化
    %下载输入输出数据,这里你可以改成自己想要训练的数据
    A= xlsread('B_data.xlsx','B2:E200');
    B=xlsread('B_data.xlsx','F2:F200');
    C= xlsread('B_data.xlsx','B201:E235');
    D=xlsread('B_data.xlsx','F201:F235');
    %找出训练数据和预测数据
    input_train=A'; %对输入数据进行转置
    output_train=B';
    input_test=C';
    output_test=D';
    
    %选连样本输入输出数据归一化
    [inputn,minp,maxp,outputn,mint,maxt]=premnmx(input_train,output_train);%归一化处理
    
    %% BP网络训练
    % %初始化网络结构
    net=newff(minmax(input_train),[4,6,1],{'tansig','tansig','purelin'},'trainlm');%创建网络,表示有输入层4层,隐层6层,输出层1% 变学习率梯度下降算法  
    %net.trainFcn='traingda';
    %net.trainFcn='traingda';
    net.trainParam.epochs=2000;%设置最大收敛次数
    net.trainParam.lr=0.0001;%设置学习速率
    net.trainParam.goal=0.00000001;%设置收敛误差
    %net.trainParam.min_grad=1e-6;%设置最小性能梯度,一般取1e-6
    %net.trainParam.min_fail=10;%设置最大确认失败次数
    
    %网络训练
    net=train(net,inputn,outputn);
    
    %% BP网络预测
    %预测数据归一化
    [input_n,minp,maxp]=premnmx(input_test);%归一化处理
    
    %网络预测输出
    an=sim(net,input_n);
    
    %网络输出反归一化
    BPoutput=postmnmx(an,mint,maxt);
    %% 结果分析
    figure(1)
    plot(BPoutput,':o')
    hold on
    plot(output_test,'-*');
    legend('预测输出','期望输出')
    title('BP网络预测输出','fontsize',12)
    ylabel('函数输出','fontsize',12)
    xlabel('样本','fontsize',12)
    
    %预测误差
    error1=(abs(BPoutput)-output_test)./output_test;
    %标准
    
    
    figure(2)
    plot(error1,'-*')
    title('BP网络预测相对误差','fontsize',12)
    ylabel('相对误差','fontsize',12)
    xlabel('样本','fontsize',12)
    
    figure(3)
    plot((output_test-BPoutput)./BPoutput,'-*');
    title('神经网络预测误差百分比')
    
    error = BPoutput-output_test;
    %errorsum=sqrt(sum(error.^2)/48);
    
    mape=sum(abs(error./output_test))*(100/48);
    %errorsum=sum((abs(error))*(abs(error))')
    %errorsum2=errorsum/11
    %errorsum3=sqrt(errorsum2)
    %avg=mean(B)
    save my_BP net;%保存训练好的BP神经网络net于my_BP中
    save my_mint mint;%保存训练好的BP神经网络归一化后的最小值于my_mint中
    save my_maxt maxt;%保存训练好的BP神经网络归一化后的最大值于my_maxt中
    

    我们一定要保存好神经网络训练好的归一化最值,不然就会在调用网络的时候出现加载之后的神经网络用sim函数就出现了’model’ parameter must be a character vector的错误

    下面展示 BP神经网络的加载网络net和加载归一化最值

    clc
    clear
    load my_BP.mat net;%加载训练好的网络模型net
    load my_maxt;%加载训练好的网络模型的归一化最大值
    load my_mint;%加载训练好的网络模型的归一化最小值
    P=xlsread('data_100.xlsx','B2:E101');
    input=P';
    input_1=premnmx(input);%对待预测数据进行归一化处理
    an=sim(net,input_1);
    BPoutput_new=postmnmx(an,mint,maxt); %对预测数据结果进行反归一化处理
    O=BPoutput_new';
    O         %输出结果         %
    

    总结

    运用save和load函数进行保存和加载训练结果比较好的神经网络net,进行对数据的预测。我们要注意除了网络net的保存和加载的同时,我们也要对神经网络处理之前的归一化最值给保存下来,不然在使用sim函数调用网络net的时候就会出现报错情况。遇事不要慌,打开浏览器搜索,绝大部分都有解决办法,加上自己思考总结,这样就能学到东西,而不是白嫖了。

    展开全文
  • 训练神经网络一般调参步骤

    万次阅读 多人点赞 2018-11-20 09:23:36
    训练神经网络的时候,需要调的参数很多。实际训练的时候如果不按照一定的顺序,会很乱。因此正确有序地调参很重要,需要调节的参数大概有如下几个[1]: 神经网络的层数 每层神经元的个数 如何初始化Weights和...

    在训练神经网络的时候,需要调的参数很多,选一组最适合自己模型的参数。实际训练的时候如果不按照一定的顺序,会很乱。因此正确有序地调参很重要,需要调节的参数大概有如下几个[1]:

    • 神经网络的层数
    • 每层神经元的个数
    • 如何初始化Weights和biases
    • loss函数选择哪一个
    • 选择何种Regularization?L1,L2
    • Regularization parameter lambda 选择多大合适
    • 激励函数如何选择
    • 是否使用dropout
    • 训练集多大比较合适
    • mini-batch选择多大
    • 学习率多少合适
    • 选择何种梯度下降算法
    • 何时停止Epoch训练
    • 自己模型的超参数

    给出自己的建议:

    1. 建议优先在对数尺度上进行超参数搜索:
      比较典型的是学习率和正则化项,我们可以从诸如0.001 0.01 0.1 1 10,以10为阶数进行尝试。因为他们对训练的影响是相乘的效果。不过有些参数,还是建议在原始尺度上进行搜索,例如dropout值: 0.3 0.5 0.7)。
    2. 选择合适的Epoch训练次数
      如果随着Epoch的次数增加,准确度在一定时间内(比如5到10次)变化很小,就可以停止Epoch。开始时可以把Epoch次数设置的大一些,观察在哪个地方准确度变化很小,就把Epoch设置成几。也可以用早停法,防止过拟合。
    3. 调节Regularization parameter lambda
      实验lambda,从1.0,10,100…找到一个合适的。注意:lambda的大小是和样本数成正比关系的,比如现在样本数、lambda分别是1000、0.4,以后把样本数扩大到10000时,对应的lambda也要扩大到4。
    4. 调节mini-batch size
      mini-batch选择太小:没有充分利用计算资源;太大:更新权重和偏向比较慢,mini-batch size和其他参数相对独立,一旦找到一个合适的以后,就不需要再改了。一般就是16,32,64,128,256找一个就行。详细见深度机器学习中的batch的大小对学习效果有何影响?
    5. 如何选择梯度下降算法
      adam或者SGD,当然还有其他自适应的梯度下降算法都可以试试。
    6. 如何选择激励函数
      如何选择激励函数,没有特别好的方法,只能靠实验比较。常用的激励函数有:sigmoid,tanh,relu。
    7. 如何设置Weights和biases
      最简单的方法:让W和b服从N(0, 1 / sqrt(n_in) ),n_in:输入神经元的个数,设置合适的W和b可以加快学习的速率,在极个别的神经网络中,W和b甚至可以影响最后训练的准确度。
    8. 选择何种Regularization
      L1和L2是对cost函数后面增加一项。L1和L2都是为了减少连接对cost影响的权重,但是L1和L2又存在一定的区别。L1减少的是一个常量,L2减少权重的一个固定比例,如果权重本身很大,L1减少的比L2少很多,反之,如果权重本省很小,L1减少的更多。L1倾向于集中在少部分重要的连接上。
      注意:对于L1,当W=0时,cost关于W的偏导没有意义,因为在W=0时不可导,此时就使用un-regulazied表达式,sgn(0)=0,本来regularization的目的就是减少权重,到权重=0时,就没有必要再减少。
      编程的时候发现这个在pytorch里是用weight decay来实现的,选择L2范式的系数就行了,但是一般用了dropout再用L2范式性能会下降,这点我没弄清楚,可能我这里说的不对,以后补充。
    9. 是否使用dropout
      pytorch里的dropout方法就是对Tensor进行随机mask,这样做可以避免过拟合,一般就是0.2,0.3,0.5,用了效果都挺好的,而且不一定拘泥于神经元,你也可以试试对训练过程中各种Tensor是用dropout。
    10. 训练集多大比较合适
      训练集越大越好,增加训练集在一定程度上也可以减少过拟合,数据集对模型很重要,有文章说,参数是对应于数据集的,多大的数据集需要数量差不多的参数就够了。
    11. Loss函数选择
      一般用交叉熵就能解决,但是具体问题具体对待,每个人都可以定义自己的损失函数。
    12. 神经元的个数
      这个在实验中其实起到挺大作用的,句子匹配中,一般第一个隐层要和输入层差不多,最后用于分类的MLP神经元2倍左右,经验值。具体任务具体对待。
    13. 自己模型的超参数
      这个最小二乘法呗。

    以后有新的感悟再更新,参考文献写的并不是很好,自己先按照这个顺序写了一下,调参感觉是个玄学,就像神经网络并不是很好解释。

    References:

    [1] https://blog.csdn.net/qoopqpqp/article/details/75271203
    [2] https://zhuanlan.zhihu.com/p/24720954

    展开全文
  • AI:训练神经网络模型过程中batch_size,steps_per_epoch,epochs意义 batch_size:批大小。batch_size是计算效率和内存容量之间的平衡参数。若为高性能GPU,可以设置更大的batch_size值。神经网络训练过程中,...

    AI:训练神经网络模型过程中batch_size,steps_per_epoch,epochs意义


    batch_size:批大小。batch_size是计算效率和内存容量之间的平衡参数。若为高性能GPU,可以设置更大的batch_size值。神经网络训练过程中,随机梯度下降时,使用梯度的数量,即每次使用batch_size个数据样本来训练、更新权重参数。1次迭代等于使用batch_size个样本训练一次。
    如果batch_size过小,训练数据就会非常难收敛,导致欠拟合。
    增大batch_size,处理速度加快,但对计算设备的内存需求也相应增大。

     


    epochs:所有的训练样本完成一次Forword运算以及一次BP运算。所有图像的训练轮次,即使用所有样本训练一遍。一个epoch是所有训练样本的一轮正向传递和一轮反向传递。
    例如,训练数据集总共有1000个样本。若batch_size=10,那么训练完全体样本集需要100次迭代,1次epoch。

     


    steps_per_epoch:一轮epoch包含的步数(每一步是batch_size个数据送入),使用TensorFlow数据Tensor输入张量进行训练时,默认None自动分割,即数据集样本数/batch_size。
    把训练样本的数量除以batch_size批大小得出。例如,总共有100张训练图片,且batch_size批大小为50,则steps_per_epoch值为2。
    batch_size=全体数据集大小 / steps_per_epoch。如果设置batch_size的大小,那么在fit_generator时 , steps_per_epoch = len(x_train) // (batch_size*epochs)
    steps_per_epoch就是对于下一轮的epoch开始之前,调用generator产生准备数据的次数,generator必须每次返回batch_size个training样本,那么:
    steps_per_epoch = total_samples//(batch_size)
    这里的//是整除,也可以使用numpy.ceil的函数向上取整,这样做的目的是为了舍弃最后不满足batch_size的数据。

    展开全文
  • 在mnist数据集上训练神经网络(非CNN)

    千次阅读 2018-08-30 23:44:34
    使用tensorflow,构造并训练一个神经网络,在mnist数据集上训练神经网络,在测试集上达到超过98%的准确率。 要点提示: 在完成的过程中,综合运用目前学到的基础知识: - 深度神经网络 - 激活函数 - 正则化 - ...
  • 下面我们首先说一下,训练神经网络的一般过程: 1.定义神经网络的结构和前向传播的输出结果 2.定义损失函数以及反向传播优化的算法 3.生成会话(Session)并且在训练数据上反复运行反向传播优化算法 要记住的一点是,...
  • 如何在训练神经网络的时候设定学习率和超参数 目录 如何在训练神经网络的时候设定学习率和超参数 1、学习率是什么? 2、学习率的作用 3、如何设定学习率 4、为训练过程添加动力 5、使用学习率表 6、适应性...
  • 训练神经网络的步骤

    千次阅读 2019-04-22 10:59:58
    按照这些步骤来训练一个神经网络 - 对于数据集中的数据点x,使用x作为输入进行前向传递,并计算成本c作为输出。 从c开始向后传递,并为图中的所有节点计算渐变。 这包括表示神经网络权重的节点。 然后通过 W = W ...
  • 本文将介绍优化训练神经网络模型的一些常用方法,并给出使用TensorFlo
  • 训练神经网络的训练主要包含以下语句:if cuda: model.cuda() model.train()#把模型的状态设置为训练状态,主要针对Dropout层 optimizer = torch.optim.SGD((model.parameters(), lr=lr, momentum=momentum)) for ...
  • torch入门笔记11:如何训练神经网络

    千次阅读 2016-10-09 15:00:39
    神经网络的前向传播和反向传播   随即生产一张照片,1通道,32x32像素的。为了直观像是,导入image包,然后用itorch.image()方法显示生成的图片,就是随即的一些点。    用之前建立好的神经网络net调用forward...
  • 训练神经网络的基本步骤

    千次阅读 2020-02-07 01:19:46
    1. 选择一种网络结构 即选择神经元之间的连通模式 输入层与输出层单元个数由具体特征决定 隐藏层通常默认为1层;若为多层,则每个隐藏层单元个数应相等。通常隐藏层单元数越多越好 隐藏层单元数应与输入特征...
  • R语言利用neuralnet包训练神经网络

    万次阅读 2017-06-06 19:50:01
    说明神经网络由一组互联的结点组成,这些节点分别负责网络的输入,连接,处理以及输出。神经网络被广泛用于诸如分类、聚类、预测等诸多领域。借助neuralnet训练得到神经网络模型。
  • 用少量样本就能训练神经网络

    千次阅读 2019-08-22 10:48:50
    在大多数时候,你是没有足够的图像来训练深度神经网络的。本文将教你如何从小样本数据快速学习你的模型。 为什么我们关心小样本学习? 1980年, Kunihiko Fukushima 提出了第一个卷积神经网络。从那时起,由于计算...
  • Part1:PyTorch简单知识Part2:PyTorch的自动梯度计算Part3:使用PyTorch构建一个神经网络Part4:训练一个神经网络分类器Part5:数据并行化本文是关于Part4的内容。 Part4:训练一个神经网络分类器前面已经介绍了...
  • R语言利用nnet包训练神经网络模型

    万次阅读 2017-06-07 10:40:42
    说明R语言提供了另外一个能够处理人工神经网络的算法包nnet,该算法提供了传统的前馈反向传播神经网络算法的实现。
  • 转载地址:https://zhuanlan.zhihu.com/p/29409502 原作者:Michael Yuan ... ...今天让我们来总结下训练神经网络中最最基础的三个概念:Epoch, Batch, Iteration。 1. 名词解释 2. 换算关系
  • 训练神经网络时如何设定学习率

    千次阅读 2020-03-30 21:09:54
    具体而言,学习速率是在神经网络训练中使用的可配置超参数,其具有小的正值,通常在0.0和1.0之间的范围内。 … learning rate, a positive scalar determining the size of the step. 学习率,确定步长大小的正标量...
  • 设置神经网络参数的过程就是神经网络训练过程。只有经过有效训练神经网络模型才可以真正地解决分类或者回归问题。 用监督学习的方式设置神经网络参数需要有一个标注好的训练数据集。监督学习最重要的思想是,在...
  • 第一章中我们谈到,我们可以借助OPenMV的源码来进一步学习OPenMV神经网络训练方法 我们打开OPenMV源码的文件夹(没有下载的小伙伴请点击 这里) cd openmv-master\ml\cmsisnn\models\lenet 进入lenet文件夹,...
  • 最新训练神经网络的五大算法

    千次阅读 2016-10-27 10:31:49
     神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。    问题的抽象  人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数...
  • 训练神经网络的全部过程

    千次阅读 2018-01-09 22:13:23
    从这段程序可以看书神经网络训练过程分为以下三个步骤: 1.定义神经网络的结构和前向传播的输出结果。 2.定义损失函数以及选择反向传播优化的算法。 3.生成会话并且在训练数据上反复运行反向传播优化算法...
  • 前言:在对神经网络进行训练时,大家经常会遇到一个超参数:batch_size 那么,batch_size究竟是什么,又该如何最优的设置这个值呢? batch_size个人理解:将所训练的样本数量分为多少个为一组。这个值的大小与梯度...
  • 从零开始:教你如何训练神经网络

    千次阅读 2017-12-13 17:43:23
    作者从神经网络简单的数学定义开始,沿着损失函数、激活函数和反向传播等方法进一步描述基本的优化算法。...此外,本系列将在后面介绍 Adam 和遗传算法等其它重要的神经网络训练方法。 I. 简介

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 266,050
精华内容 106,420
关键字:

训练神经网络