神经网络问题汇总.docx

上传人:b****5 文档编号:8344091 上传时间:2023-01-30 格式:DOCX 页数:14 大小:43.19KB
下载 相关 举报
神经网络问题汇总.docx_第1页
第1页 / 共14页
神经网络问题汇总.docx_第2页
第2页 / 共14页
神经网络问题汇总.docx_第3页
第3页 / 共14页
神经网络问题汇总.docx_第4页
第4页 / 共14页
神经网络问题汇总.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

神经网络问题汇总.docx

《神经网络问题汇总.docx》由会员分享,可在线阅读,更多相关《神经网络问题汇总.docx(14页珍藏版)》请在冰豆网上搜索。

神经网络问题汇总.docx

神经网络问题汇总

1最近看神经网络的书籍时,看了论坛的一些相关帖子,可是仍是有些地方不太明白,感觉很多训练函数参数的解释都是一笔带过,我这个初学者有点难理解,

2epochs是最大训练次数,能否说也是迭代次数,即重复循环次数。

3lr学习率怎么理解呢?

特别是它的数字代表的什么意思呢?

能否举例说明,谢谢。

4min_grad最小梯度要求,针对的是所有函数的梯度?

关于梯度这里也有点迷糊,网上把梯度当成导数理解,这样合适吗?

还有梯度的计算,为什么要计算梯度呢?

这里的梯度指的是所有传递函数的梯度?

5show显示训练迭代过程,50就代表每隔50次训练,显示一次训练进程,这样理解合适吗?

以怎样的方式显示呢?

是不是performance每隔50取一个点再连接起来?

6问题比较基础,也比较多,因为小弟初学者,还请多多理解。

谢谢耐心的你,回答我的问题

 

理解为最大迭代次数是没问题的

是学习率,这是权值调整过程中用到的一个参数,具体含义还需从权值调整的原理说起

3.梯度和学习率一样,如果对算法原理不了解,很难解释清楚

4.关于show你的理解是正确的

 

对于梯度下降可以理解为每次权值和阀值的修改量大小,改动过小了,就可以够以为网络收敛,可以停止训练了

2

请问:

用matlab初始化PSO算法的v、x时,一下这两种方式应该都差不多吗?

=rand(N,D,1)  2.用for循环赋值:

x(i,j)=rand      我在程序中试过最后结果都是N*D的随机矩阵,是不是方法2用for略显繁琐些呢?

曾经看过帖子,有人说在matlab下乱用for循环是没有充分利用matlab的矩阵功能,所以我想,是不是在matlab下用1更好些呢?

两种方式是完全一样的,第一种没有效循环,所以效果更好点,用循环会增加程序的运行时间

3

请教个问,要得急下图是两类样本,红色的是一类,蓝色的是一类,这样的样本能用吗?

 

楼主能具体解释下数据不,神经网络预测的精准与否与数据有比较大的关系,简单来讲,就是输入数据和输出数据存在关联性,因为网络本身可以看成是一个函数的

4

发表于2009-11-609:

07:

31||

您好史老师,我以前用的是工具箱中newff,train,sim。

样本就是这些,训练精度达人满意的效果。

现在自已写程序能否达到这个效果?

我的样本是实际测量得出的。

而且样本的数目根据实际情况已经不可能再增加.谢谢

中午归去给你试下,不过你的数据里面只有训练数据了,没有测试数据了,一般工具箱函数精度高很多,我自己做的BP程序也存在预测效果稍差的问题

 

楼主的问题解决了,应该是加上阀值,不是减阀值,正好反了,另外,建议楼主把输入数据归一化,输出归一不归一无所谓

 

5L=[1234;5678;9101112]

L=

    1    2    3    4

    5    6    7    8

    9  10  11  12

>>std=corrcoef(L)%相关系数

std=

    1    1    1    1

    1    1    1    1

    1    1    1    1

    1    1    1    1

>>covL=cov(L)%协方差

covL=

  16  16  16  16

  16  16  16  16

  16  16  16  16

  16  16  16  16

[本帖最后由niuniuyun于2009-10-2617:

27编辑]

6很多自变量,一个因变量,如何用神经网络进行变量选择,找出和因变量最相关的几个自变量?

  用哪些神经网络好呢?

原帖由史峰于2009-10-1517:

32发表

你好,BP和RBF等都应该可以,各种网络间差异应该不是很大,楼主的问题的具体是怎样的呢,能详细描述一下吗,比如数据的输入输出,训练集等等

一共有644个自变量,一个因变量。

要在这644个自变量当选择和因变量最相关的。

问题就是这样。

pca恍如能做。

神经网络也可以,可是不知道如何下手。

 

这个得具体问题具体分析,大体的思路是将所有自变量进行分组,所有分组的组合组成搜索空间,利用遗传算法找到最优的分组组合,对应的自变量就是挑选出来的输入变量

7fori=1:

nRept

  

  net=newff(p_z,t_z,n,{'tansig','purelin'},'traingdx');

  %net=newff(minmax(p_z),[n,1],{'tansig','purelin'},'traingdx');

  %初始化网络

  %网络设置

  {1}.initFcn='initnw';

  {1,1}.initFcn='rands';

  {1,1}.initFcn='rands';

  net=init(net);

  %训练网络

  

  

  

  

  [net,tr]=train(net,p_z,t_z);

  %调用TRAINGDX算法训练BP网络

  %对BP网络进行仿真

  temp=sim(net,p_sim_z);

  re=mapminmax('reverse',temp,TS);

  sum=re;

  %echooff

end;

例子如上,请问如何保存所有神经网络模型,好做为以后预测用?

 

采用元胞数组,比如训练好一个网络net,设定一个元胞数组a=cell(1,5),a{1}=net,用该网络预测用sim(a{1},-)就可以够

8用PSO优化BP网络似乎效果比单纯用BP也没有太大改观啊,不知道大家仿真后效果如何?

有的时候恍如还不如bp训练的效果呀,该怎么调整呢?

我的数据是4×74的矩阵,(74个采样时间),输出是1×74的量,网络结构是4-5-一、40/60/80个粒子都试过了200次左右的迭代。

是不是样本少了呀?

,单独用BP时一开始用的是37个采样时间的数值,拟合不是很好,后来又选了些数据,到74个采样点是,效果就很好了,一样的数据,用PSO优化该网络后的效果反而不怎么样了,还需要注意什么问题吗?

谢谢诸位!

是数据比较少,所以网络本身没有学习充分,加上优化方式后,虽然训练精准了,可是等于过拟合了,预测效果反而更差,楼主可以多找点数据,而且这个问题很多文献都有问题的

9您好,列位老师:

    我用GUI进行神经网络的编写,以前一直用的是神经网络工具箱中的newff,train,sim函数。

这次在GUI里也是用这几个。

在未编译前运行正常。

可是编译成exe后,却不可以用了。

怎么解决?

盼指教!

神经网络工具箱不可用于exe文件,的确需要用的话需要自己神经网络程序

10

列位先辈:

    你们好!

    我刚刚接触神经网络不久,在用BP网络和RBF网络来进行预测时,得到的结果误差比较大。

BP网络,我也调整了很多次隐层单元个数和训练的次数,可是总是无法得到较为精确地结果;RBF我也调整了很多SPREAD值,结果也很不理想!

如果不是数据的原因,我想知道我的程序有哪些不足之处和需要改进的地方!

希望各位前辈能帮我修改一下,并帮我指出一下。

我在此表示真诚的感谢!

代码我一起发过去!

      还有一个问题,因为网络每次训练的结果不一样,我想把其中的一次保存起来,下次训练时得到相同的结果,我应该怎么办?

(我用过savefilenamenet和loadfilenamenet,可不知道该放在程序什么位置)

      非常期待各位的回音!

谢谢大家了!

不好意思,我不该该添加附件的,让大家花M币

BP代码:

clc;

clear;

closeall;

%输入样本数据,前十组用来作训样本练,后面四组用来预测

p=[

;

6870;

;

;

18;

;

199;

;

27;

98;

;

28;

;

321  

]';

%目标向量

t=[  ;

      ;

    ;

      ;

    ;

    ;

    ;

    ;

    ;

    ;

  

  

  

  ]';

%输入向量归一

fori=1:

5

  P(i,:

)=(p(i,:

)-min(p(i,:

)))/(max(p(i,:

))-min(p(i,:

)));

end

%目标向量归一

fori=1:

2

  T(i,:

)=(t(i,:

)-min(t(i,:

)))/(max(t(i,:

))-min(t(i,:

)));

end

%学习样本

P_train=[P(:

1)P(:

2)P(:

3)P(:

4)P(:

5)P(:

6)P(:

7)P(:

8)P(:

9)P(:

10)];

T_train=[T(:

1)T(:

2)T(:

3)T(:

4)T(:

5)T(:

6)T(:

7)T(:

8)T(:

9)T(:

10)];

%测试样本

P_test=[P(:

11)P(:

12)P(:

13)P(:

14)];

T_test=[T(:

11)T(:

12)T(:

13)T(:

14)];  

%隐层单元个数向量为15

  net=newff(minmax(P),[15,2],{'tansig','logsig'});

  

  net=init(net);

  net=train(net,P_train,T_train);

  Temp=sim(net,P_test);  

  y(1,:

)=Temp(1,:

);

  y(2,:

)=Temp(2,:

);

  Y1=[y(1,:

);y(2,:

)];

%求预测误差,画出误差曲线

fori=1:

4

  error1(i)=norm(Y1(:

i)-T_test(:

i));

end

figure;

plot(1:

4,error1);

holdoff;

fori=1:

2

%反归一化

TT(i,:

)=Temp(i,:

)*(max(t(i,:

))-min(t(i,:

)))+min(t(i,:

));

end

fori=1:

2

T2(i,:

)=T(i,:

)*(max(t(i,:

))-min(t(i,:

)))+min(t(i,:

));

end

 

RBF代码:

clc;

clear;

closeall;

%输入样本数据,前十组用来作训样本练,后面四组用来预测

p=[

;

6870;

;

;

18;

;

199;

;

27;

98;

;

28;

;

321  

]';

%目标向量

t=[  ;

      ;

    ;

      ;

    ;

    ;

    ;

    ;

    ;

    ;

  

  

  

  ]';

%归一化的输入向量

fori=1:

5

  P(i,:

)=(p(i,:

)-min(p(i,:

)))/(max(p(i,:

))-min(p(i,:

)));

end

fori=1:

2

  T(i,:

)=(t(i,:

)-min(t(i,:

)))/(max(t(i,:

))-min(t(i,:

)));

end

%学习样本

P_train=[P(:

1)P(:

2)P(:

3)P(:

4)P(:

5)P(:

6)P(:

7)P(:

8)P(:

9)P(:

10)];

T_train=[T(:

1)T(:

2)T(:

3)T(:

4)T(:

5)T(:

6)T(:

7)T(:

8)T(:

9)T(:

10)];

%测试样本

P_test=[P(:

11)P(:

12)P(:

13)P(:

14)];

T_test=[T(:

11)T(:

12)T(:

13)T(:

14)];  

%建立网络

  net=newrbe(P_train,T_train,1);

  temp=sim(net,P_test);

  y(1,:

)=temp(1,:

);

  y(2,:

)=temp(2,:

);

  Y1=[y(1,:

);y(2,:

)];

  temp=sim(net,P_test)

%求预测误差

fori=1:

4

  error1(i)=norm(Y1(:

i)-T_test(:

i));

end

figure;

plot(1:

4,error1,'--');

holdon;

史峰程序没问题,数据太少了,需要保留网络用savenet就可以够,下次需要利用用loadnet,然后用sim(net)

 

savenet放在程序快结尾的地方,loadnet放在下次要挪用该保留过的网络时,程序开始的地方,你可以选很多次训练下来,结果好的那个网络拟合其他数据,呵呵,很好用的!

象前面几位老师说的,你的数据是太少了。

一般来讲目标向量就是你用神经网络的目的。

预测的话是预测目标值;评估的话就是评估结果,分类是分类结果,要看你要干什么。

目标向量的维数看你需要几个结果,若是他们可以用一个网络仿真的话就归于一个也没问题,一般用一个输出比较好,免得几个的输入影响不同时造成困难。

我是弄预测的,有问题一路交流:

victory:

11我此刻的数据y和x都是离散点的矩阵,想实现y对x的导数。

可用diff(y)实现却犯错了。

比如如下程序要实现y对x的导数该如何实现

clc

clear

y=[1234543212

    ];

x=[:

:

1];

figure

(1)

plot(x,y)

diff(y)

我看过polyder是利用的多项式的系数进行求导的。

我此刻这个不是多项目式,我以为是不能用polyder进行求的。

clc

clear

y=[1234543212;

  ];

x=[:

:

1];

figure

(1)

plot(x,y)

y1=[];

fori=1:

2

  y1=[y1;diff(y(i,:

))];

end

figure

(2)

plot(x,y1,'*')

我这样运行后怎么Y1变成了2行9列的矩阵了。

我是一个2行10列的呀

那位高手帮我看看。

固然是2行9列的矩阵。

helpdiff中写得很清楚:

Y=diff(X)calculatesdifferencesbetweenadjacentelementsofX.

IfXisavector,thendiff(X)returnsavector,oneelementshorterthanX,ofdifferencesbetweenadjacentelements:

[X

(2)-X

(1)X(3)-X

(2)...X(n)-X(n-1)]

IfXisamatrix,thendiff(X)returnsamatrixofrowdifferences:

[X(2:

m,:

)-X(1:

m-1,:

)]

12老师好!

    我在自己的一个仿真试验中(基于matlab/sinmulink),运用到神经网络,这是一个用matlab训练好的一个bp,神经网络模块(如附件图中)是用gensim函数生成的。

    我把自己的问题简单的用附件上的图形说明了一下。

在图中输入信号的范围并不是[-11]之间,所以我想,在输入给神经网络模块的之前应该进行归一化处理,同样的神经网络的输出也应该进行反归一化处理吧?

可是这个归一化和反归一化模块应该如何建立呢?

    麻烦老师给我详细的解答一下,谢谢了!

用s函数来写,若是网络训练是事前训练好地话,首先是若是训练数据归一化处置了,那么预测数据肯定也需要归一化处置,若是训练数据没有归一化处置,那么测试数据不需要归一化处置。

测试数据归一化时需要知道训练数据归一化地信息,比如下面,input_train和output_train是训练数据,input_test和output_test是测试数据,网络是net

%选连样本输入输出数据归一化

[inputn,inputps]=mapminmax(input_train);

[outputn,outputps]=mapminmax(output_train);

%%BP网络预测

%预测数据归一化

inputn_test=mapminmax('apply',input_test,inputps);

%网络预测输出

an=sim(net,inputn_test);

%网络输出反归一化

BPoutput=mapminmax('reverse',an,outputps);

这样就可以了,并且你这个S函数也比较简单,没有状态量,直接输出就可以了,具体地查下相关地S函数编写方法

13

 

不好意思,老问题了,列位大哥勿怪啊。

我曾经把用整个时间段的电流来仿真这个想法跟师兄们说过,他们对神经网络不太理解,但是对于随机取一部分值,一部分用来训练,另外一部分用来仿真,他们比较认同这个预测结果,如果想我刚才提出那种仿真,即全部输入量作为仿真对象,他们就不同意了,始终认为说服力不够,好比提前把答案看了一下再去做原题,即使原题里面有小部分新题(即未参与训练的数据),但是大体结果不会改变,因为训练的数据占整个数据的大部分。

不知道我的这种描述容易理解么?

他们当时就是提出这个疑问,我不知道如何用专业的神经网络知识来打消他们的这种疑问,史大哥能否对这种质疑给出专家回答呢?

呵呵,麻烦你了。

[本帖最后由李洋于2009-12-1323:

29编辑]

答:

恩,你同窗说的是有道理的,其实前面几个问题我看已经预测的挺不错了,比如对于预测精度,结果已经比较好了,可是看误差百分比的话超级小的。

增加训练样本的目的就是为了能够使网络能够加倍精准拟合,不过网络不是全能的,拟合能力也是有限度的,所以很多复杂的问题用网络拟合效果也不是很好。

14

%注意要把CurrentDirectory调到放tr  ts的目录!

clc

clearall

%加载训练集测试集

load;

load;

traindata=tr;

testdata=ts;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%traindata=load('c:

\');

%testdata=load('c:

\');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%转置后复制给新矩阵

train_input=traindata(:

1:

4)';

train_output=traindata(:

5)';

  P=train_input;

  T=train_output;

  %归一话矩阵

  [inputn,mininput,maxinput,outputn,minoutput,maxoutput]=premnmx(P,T);

  %建立网络

  net_1=newff(minmax(inputn),[9,1],{'tansig','purelin'},'traingdm')

  inputWeights={1,1}

  inputbias={1}

  layerWeights={2,1}

  layerbias={2}

  

  

  

  

  

  %训练网络

  [net_1,tr]=train(net_1,inputn,outputn,test_inputn,test_output);

  

  %预测训练集输出

  train_simu=sim(net_

如何选取测试数据集?

分为三种样本:

50%的训练集、25%验证集和25%测试集。

其中,

a.训练集:

估计模型;

b.验证集:

确定网络结构或者控制模型复杂度的参数;

c.测试集:

检验最终选择的模型性能如何。

就是这样的b.验证集:

确定网络结构或者控制模型复杂度的参数;要是加上交叉验证就更好了。

用dividerand就可以够了

楼主能具体解释下数据不,神经网络预测的精准与否与数据有比较大的关系,简单来讲,就是输入数据和输出数据存在关联性,因为网络本身可以看成是一个函数的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1