导航:首页 > 网络设置 > bp神经网络一般多少数据训练合适

bp神经网络一般多少数据训练合适

发布时间:2022-07-21 14:14:40

⑴ 用MATLAB与BP神经网络法处理15组数据,共60个数据,需要多长时间

训练时长取决于训练算法、训练目标、样本数量和网络规模。你的样本只有15组,数量较少,一般几秒钟就能训练完成。

若从速度的角度出发,人脑神经元之间传递信息的速度要远低于计算机,前者为毫秒量级,而后者的频率往往可达几百兆赫。但是,由于人脑是一个大规模并行与串行组合处理系统,因而,在许多问题上可以作出快速判断、决策和处理,其速度则远高于串行结构的普通计算机。人工神经网络的基本结构模仿人脑,具有并行处理特征,可以大大提高工作速度。

⑵ BP神经网络 分组训练 可行么 数据太大,直接搞得话内存爆满,分开训练的话,又觉得缺乏理论。

矩阵200m,什么矩阵啊,一般神经网络几千个节点就差不多了,也就几个到几十个k的数据啊。

⑶ BP神经网络的训练集需要大样本吗一般样本个数为多少

BP神经网络的训练集需要大样本吗?一般样本个数为多少?
BP神经网络样本数有什么影响
学习神经网络这段时间,有一个疑问,BP神经网络中训练的次数指的网络的迭代次数,如果有a个样本,每个样本训练次数n,则网络一共迭代an次,在n>>a 情况下 , 网络在不停的调整权值,减小误差,跟样本数似乎关系不大。而且,a大了的话训练时间必然会变长。
换一种说法,将你的数据集看成一个固定值, 那么样本集与测试集 也可以按照某种规格确定下来如7:3 所以如何看待 样本集的多少与训练结果呢? 或者说怎么使你的网络更加稳定,更加符合你的所需 。

我尝试从之前的一个例子中看下区别

如何用70行Java代码实现深度神经网络算法

作者其实是实现了一个BP神经网络 ,不多说,看最后的例子

一个运用神经网络的例子
最后我们找个简单例子来看看神经网络神奇的效果。为了方便观察数据分布,我们选用一个二维坐标的数据,下面共有4个数据,方块代表数据的类型为1,三角代表数据的类型为0,可以看到属于方块类型的数据有(1,2)和(2,1),属于三角类型的数据有(1,1),(2,2),现在问题是需要在平面上将4个数据分成1和0两类,并以此来预测新的数据的类型。


图片描述

我们可以运用逻辑回归算法来解决上面的分类问题,但是逻辑回归得到一个线性的直线做为分界线,可以看到上面的红线无论怎么摆放,总是有一个样本被错误地划分到不同类型中,所以对于上面的数据,仅仅一条直线不能很正确地划分他们的分类,如果我们运用神经网络算法,可以得到下图的分类效果,相当于多条直线求并集来划分空间,这样准确性更高。

图片描述

简单粗暴,用作者的代码运行后 训练5000次 。根据训练结果来预测一条新数据的分类(3,1)



预测值 (3,1)的结果跟(1,2)(2,1)属于一类 属于正方形

这时如果我们去掉 2个样本,则样本输入变成如下

//设置样本数据,对应上面的4个二维坐标数据
double[][] data = new double[][]{{1,2},{2,2}};
//设置目标数据,对应4个坐标数据的分类
double[][] target = new double[][]{{1,0},{0,1}};
1
2
3
4
1
2
3
4




则(3,1)结果变成了三角形,

如果你选前两个点 你会发现直接一条中间线就可以区分 这时候的你的结果跟之前4个点时有区别 so 你得增加样本 直到这些样本按照你所想要的方式分类 ,所以样本的多少 重要性体现在,样本得能反映所有的特征值(也就是输入值) ,样本多少或者特征(本例子指点的位置特征)决定的你的网络的训练结果,!!!这是 我们反推出来的结果 。这里距离深度学习好像近了一步。

另外,这个70行代码的神经网络没有保存你训练的网络 ,所以你每次运行都是重新训练的网络。其实,在你训练过后 权值已经确定了下来,我们确定网络也就是根据权值,so只要把训练后的权值保存下来,将需要分类的数据按照这种权值带入网络,即可得到输出值,也就是一旦网络确定, 权值也就确定,一个输入对应一个固定的输出,不会再次改变!个人见解。

最后附上作者的源码,作者的文章见开头链接
下面的实现程序BpDeep.java可以直接拿去使用,

import java.util.Random;
public class BpDeep{
public double[][] layer;//神经网络各层节点
public double[][] layerErr;//神经网络各节点误差
public double[][][] layer_weight;//各层节点权重
public double[][][] layer_weight_delta;//各层节点权重动量
public double mobp;//动量系数
public double rate;//学习系数

public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;l<layernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1<layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;j<layernum[l]+1;j++)
for(int i=0;i<layernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//随机初始化权重
}
}
}
//逐层向前计算输出
public double[] computeOut(double[] in){
for(int l=1;l<layer.length;l++){
for(int j=0;j<layer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;i<layer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐层反向计算误差并修改权重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;j<layerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);

while(l-->0){
for(int j=0;j<layerErr[l].length;j++){
double z = 0.0;
for(int i=0;i<layerErr[l+1].length;i++){
z=z+l>0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隐含层动量调整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隐含层权重调整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距动量调整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距权重调整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//记录误差
}
}
}

public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
下面是这个测试程序BpDeepTest.java的源码:

import java.util.Arrays;
public class BpDeepTest{
public static void main(String[] args){
//初始化神经网络的基本配置
//第一个参数是一个整型数组,表示神经网络的层数和每层节点数,比如{3,10,10,10,10,2}表示输入层是3个节点,输出层是2个节点,中间有4层隐含层,每层10个节点
//第二个参数是学习步长,第三个参数是动量系数
BpDeep bp = new BpDeep(new int[]{2,10,2}, 0.15, 0.8);

//设置样本数据,对应上面的4个二维坐标数据
double[][] data = new double[][]{{1,2},{2,2},{1,1},{2,1}};
//设置目标数据,对应4个坐标数据的分类
double[][] target = new double[][]{{1,0},{0,1},{0,1},{1,0}};

//迭代训练5000次
for(int n=0;n<5000;n++)
for(int i=0;i<data.length;i++)
bp.train(data[i], target[i]);

//根据训练结果来检验样本数据
for(int j=0;j<data.length;j++){
double[] result = bp.computeOut(data[j]);
System.out.println(Arrays.toString(data[j])+":"+Arrays.toString(result));
}

//根据训练结果来预测一条新数据的分类
double[] x = new double[]{3,1};
double[] result = bp.computeOut(x);
System.out.println(Arrays.toString(x)+":"+Arrays.toString(result));
}
}

⑷ bp神经网络预测是不是数据越多,预测能力就越好

您好,一般来说是数据越多越好,但是增加数据量并不是唯一增强预测能力的方式,还可以通过调整超参数、改变网络结构、使用正则化/BN层等防过拟合技术、改进数据质量等方法,来实现预测能力的增强。

⑸ bp神经网络,是不是数据越多,预测能力越好!

准确的说是数据越全面,越能体现数据分布,预测才越好
但一般我们也不知道数据原本的分布是怎么样的~所以,收集越多的不同的数据,一般来说预测就越好。当然,如果发现数据多到一个程度后,预测效果没什么变化,说明数据的表达能力,或者说数据的分布已经很充沛了,特征方差不变了,多了也没什么用

⑹ 神经网络,训练样本500条,为什么比训练样本6000条,训练完,500条预测比6000条样本好!

并非训练样本越多越好,因课题而异。 1、样本最关键在于正确性和准确性。你所选择的样本首先要能正确反映该系统过程的内在规律。我们从生产现场采得的样本数据中有不少可能是坏样本,这样的样本会干扰你的神经网络训练。通常我们认为坏样本只是个别现象,所以我们希望通过尽可能大的样本规模来抵抗坏样本造成的负面影响。 2、其次是样本数据分布的均衡性。你所选择的样本最好能涉及到该系统过程可能发生的各种情况,这样可以极大可能的照顾到系统在各个情况下的规律特征。通常我们对系统的内在规律不是很了解,所以我们希望通过尽可能大的样本规模来“地毯式”覆盖对象系统的方方面面。 3、再次就是样本数据的规模,也就是你要问的问题。在确保样本数据质量和分布均衡的情况下,样本数据的规模决定你神经网络训练结果的精度。样本数据量越大,精度越高。由于样本规模直接影响计算机的运算时间,所以在精度符合要求的情况下,我们不需要过多的样本数据,否则我们要等待很久的训练时间。 补充说明一下,不论是径向基(rbf)神经网络还是经典的bp神经网络,都只是具体的训练方法,对于足够多次的迭代,训练结果的准确度是趋于一致的,方法只影响计算的收敛速度(运算时间),和样本规模没有直接关系。

如何确定何时训练集的大小是“足够大”的?
神经网络的泛化能力主要取决于3个因素:
1.训练集的大小
2.网络的架构
3.问题的复杂程度
一旦网络的架构确定了以后,泛化能力取决于是否有充足的训练集。合适的训练样本数量可以使用Widrow的拇指规则来估计。 拇指规则指出,为了得到一个较好的泛化能力,我们需要满足以下条件(Widrow and Stearns,1985;Haykin,2008): N = nw / e 其中,N为训练样本数量,nw是网络中突触权重的数量,e是测试允许的网络误差。 因此,假如我们允许10%的误差,我们需要的训练样本的数量大约是网络中权重数量的10倍。

⑺ 关于BP神经网络的

样本数据越多越准确不错,然而数据越多,网络越复杂,需要训练的次数越来越多,所以收敛的越来越慢,所以可能训练500次都达不到精度,你可以适当增大学习率,会变快一些。

⑻ BP神经网络数据400组少吗

少。
如果你的数据具有非常复杂的对应关系,比如现在你分类到博彩类,用神经网络理论上讲是可以预测的的,很多人发了论文,讲怎么用神经网络预测双色球什么的。实际上效果并不是非常理想。因为内在规律太复杂,有限的数据无法透彻的归纳出来到底数据怎么变化。这种情况下,纵使你又几千个数据也不行。比较保险的办法还是用逆向工程方法建立一个一个的子模型,然后整理成一个大模型再做预测。往往会比因为数据量不够引起的神经网络预测误差要小得多。

⑼ BP神经网络输入层和训练次数怎样选择

输入层就是看你研究的结果影响因子的数目,而训练次数是程序自己计算的,因为你要设定误差目标,模型误差到达你设定的目标误差时训练结束,这时的训练次数就是最终训练次数。

⑽ matlab神经网络训练一般需要多少数据

你这个问题真的不好回答,因为没有固定答案,也没有什么经验答案,不能太少也不能太多,因为需要根据实际情况决定了,看你是要做什么了

阅读全文

与bp神经网络一般多少数据训练合适相关的资料

热点内容
探岳新车网络设置 浏览:484
奉贤电脑网络服务 浏览:469
坦洲网络电视电话是多少 浏览:621
破坏计算机网络安全罪和网络盗窃 浏览:536
座机电话如何开通移动网络 浏览:731
为什么探头显示无法连接网络 浏览:311
使用剪映配音显示网络异常 浏览:438
三星s8微信网络连接 浏览:707
手机网络发烫会不会坏 浏览:695
是哪个网络大地 浏览:53
用网络打电话的东西是什么 浏览:539
无线网络高级设置怎么找 浏览:907
极光网络精灵盛典v12多少钱 浏览:519
和网络上不相识的人见到过什么 浏览:64
公寓里的网络wifi账号 浏览:722
网络实体店怎么开 浏览:675
gogo总是显示网络异常 浏览:956
怎么将wifi设置成家庭网络 浏览:978
美团专送软件显示网络异常 浏览:396
益阳营销策划网络推广途径有哪些 浏览:252

友情链接