1、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));
}
}

谷歌人工智能写作项目:小发猫

2、bp神经网络的学习样本是只有输出而已嘛?

这个没有明确要求,样本也不是越多越好bp神经网络训练要多少个样本。通常情况下,你的样本可以一部分用来做验证。加速你有100个样本,90%用来做训练,10%用来做验证等,当然,有时候还得留下10%做测试用。我个人的经验是,样本数尽量在10以上吧。

3、神经网络,训练样本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倍。

4、神经网络对样本个数有要求么?

样本的数目没什么固定的,但是那些写论文的多把训练样本和测试样本的比例设在4:1左右,这个应依据实际情况而定。

5、bp神经网络训练能支持100张图片吗?

bp神经网络训练能支持100张图片的呀。

6、rbf神经网络的训练样本要多大

因课题而异。
1、样本最关键在于正确性和准确性。你所选择的样本首先要能正确反映该系统过程的内在规律。我们从生产现场采得的样本数据中有不少可能是坏样本,例如由于测量仪器故障导致测量数据误差较大等,这样的样本会干扰你的神经网络训练。通常我们认为坏样本只是个别现象,所以我们希望通过尽可能大的样本规模来抵抗坏样本造成的负面影响。
2、其次是样本数据分布的均衡性。你所选择的样本最好能涉及到该系统过程可能发生的各种情况。例如某化工生产中某反应炉的温度主要分布在350度—400度,且出现在380度的情况较多,那么你的样本数据最好也是在350-400度各种情况都有,并且也是在380度左右的样本较多些,这样可以极大可能的照顾到系统在各个情况下的规律特征。通常我们对系统的内在规律不是很了解,所以我们希望通过尽可能大的样本规模来“地毯式”覆盖对象系统的方方面面。
3、再次就是样本数据的规模,也就是你要问的问题。在确保样本数据质量和分布均衡的情况下,样本数据的规模决定你神经网络训练结果的精度。样本数据量越大,精度越高。还用刚才的例子,假如反应炉的温度主要均匀分布在375-385度之间,那么你用100个均衡分布在375-385度的训练样本去训练,经过无限次或者说是足够多次迭代之后,理论上你的神经网络的精度就是0.1度。如果你觉得0.1度足够细腻了,那么样本规模为100也就可以接受了。由于样本规模直接影响计算机的运算时间,所以在精度符合要求的情况下,我们不需要过多的样本数据,否则我们要等待很久的训练时间。
补充说明一下,不论是径向基(rbf)神经网络还是经典的bp神经网络,都只是具体的训练方法,对于足够多次的迭代,训练结果的准确度是趋于一致的,方法只影响计算的收敛速度(运算时间),和样本规模没有直接关系。

7、BP神经网络的每一个样本可以是一个矩阵吗?如何输入?谢谢!

每个样本对应一组变量值,但是BP神经网络使用时一般不使用1个样本去训练,都是使用若干组样本,这样他的若干组样本就是矩阵了。
直接定义
P=[
1 2 1 3;%这是一组样本
1 2 1 4;%这是第二组样本
...
];
这样就定义了输入矩阵。
输出矩阵也是同样的定义。
输入矩阵与输出矩阵的行数(样本个数)必须一致。
net(....);
train(net....);
如果报错,就把P和T同时转置(P=P';T=T';)一下。

8、matlab BP神经网络中,最后算出的MSE值应该为多少?

表示对网络训练结果的测试。

Mse的意思是均方误差,当然越小越好。但这和你有多少训练样本,有多少训练课程有很大关系。

这个没有标准,每个人都知道零偏差是最好的。但是,神经网络本身的致命缺陷被消除了,因为它是对解析表达式的迭代收敛逼近,所以不可能达到零误差。

这样只能根据用户的工程技术要求来判断,误差指标应该小于工程误差范围啊。但对于科学研究来说,只能具体分析。量化没有明确或绝对的意义。

扩展资料:

BP神经网络的计算过程包括正演计算过程和反演计算过程。在正向传播过程中,输入模式从输入层到隐藏单元层,再到输出层进行逐层处理。

每一层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到想要的输出,则误差信号将沿原连接路径反向传播返回,并对每个神经元的权值进行修改,使误差信号最小化。

参考资料:

9、BP神经网络,我样本大小400,其中20%做Validation,20%做Testing,剩下Training,这个是自动划分?还是手动

1.划分过程没有任何神秘的 就是随机分组 只要做到不重不漏就可以。题主说的那个工具我没听过。在很多编程需要中都有随机重新排列数组的函数,借用这个就可以实现划分了。
2. 程序应该是题主自己写的 其行为由题主自己控制 因此后一个问题只能题主自己回答

10、BP人工神经网络方法

(一)方法原理

人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统。理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势。人工神经元是神经网络的基本处理单元,其接收的信息为x1,x2,…,xn,而ωij表示第i个神经元到第j个神经元的连接强度或称权重。神经元的输入是接收信息X=(x1,x2,…,xn)与权重W={ωij}的点积,将输入与设定的某一阈值作比较,再经过某种神经元激活函数f的作用,便得到该神经元的输出Oi。常见的激活函数为Sigmoid型。人工神经元的输入与输出的关系为

地球物理勘探概论

式中:xi为第i个输入元素,即n维输入矢量X的第i个分量;ωi为第i个输入与处理单元间的互联权重;θ为处理单元的内部阈值;y为处理单元的输出。

常用的人工神经网络是BP网络,它由输入层、隐含层和输出层三部分组成。BP算法是一种有监督的模式识别方法,包括学习和识别两部分,其中学习过程又可分为正向传播和反向传播两部分。正向传播开始时,对所有的连接权值置随机数作为初值,选取模式集的任一模式作为输入,转向隐含层处理,并在输出层得到该模式对应的输出值。每一层神经元状态只影响下一层神经元状态。此时,输出值一般与期望值存在较大的误差,需要通过误差反向传递过程,计算模式的各层神经元权值的变化量

。这个过程不断重复,直至完成对该模式集所有模式的计算,产生这一轮训练值的变化量Δωij。在修正网络中各种神经元的权值后,网络重新按照正向传播方式得到输出。实际输出值与期望值之间的误差可以导致新一轮的权值修正。正向传播与反向传播过程循环往复,直到网络收敛,得到网络收敛后的互联权值和阈值。

(二)BP神经网络计算步骤

(1)初始化连接权值和阈值为一小的随机值,即W(0)=任意值,θ(0)=任意值。

(2)输入一个样本X。

(3)正向传播,计算实际输出,即根据输入样本值、互联权值和阈值,计算样本的实际输出。其中输入层的输出等于输入样本值,隐含层和输出层的输入为

地球物理勘探概论

输出为

地球物理勘探概论

式中:f为阈值逻辑函数,一般取Sigmoid函数,即

地球物理勘探概论

式中:θj表示阈值或偏置;θ0的作用是调节Sigmoid函数的形状。较小的θ0将使Sigmoid函数逼近于阈值逻辑单元的特征,较大的θ0将导致Sigmoid函数变平缓,一般取θ0=1。

(4)计算实际输出与理想输出的误差

地球物理勘探概论

式中:tpk为理想输出;Opk为实际输出;p为样本号;k为输出节点号。

(5)误差反向传播,修改权值

地球物理勘探概论

式中:

地球物理勘探概论

地球物理勘探概论

(6)判断收敛。若误差小于给定值,则结束,否则转向步骤(2)。

(三)塔北雅克拉地区BP神经网络预测实例

以塔北雅克拉地区S4井为已知样本,取氧化还原电位,放射性元素Rn、Th、Tc、U、K和地震反射

构造面等7个特征为识别的依据。

构造面反映了局部构造的起伏变化,其局部隆起部位应是油气运移和富集的有利部位,它可以作为判断含油气性的诸种因素之一。在该地区投入了高精度重磁、土壤微磁、频谱激电等多种方法,一些参数未入选为判别的特征参数,是因为某些参数是相关的。在使用神经网络方法判别之前,还采用K-L变换(Karhaem-Loeve)来分析和提取特征。

S4井位于测区西南部5线25点,是区内唯一已知井。该井在5390.6m的侏罗系地层获得40.6m厚的油气层,在5482m深的震旦系地层中获58m厚的油气层。取S4井周围9个点,即4~6线的23~25 点作为已知油气的训练样本;由于区内没有未见油的钻井,只好根据地质资料分析,选取14~16线的55~57点作为非油气的训练样本。BP网络学习迭代17174次,总误差为0.0001,学习效果相当满意。以学习后的网络进行识别,得出结果如图6-2-4所示。

图6-2-4 塔北雅克拉地区BP神经网络聚类结果

(据刘天佑等,1997)

由图6-2-4可见,由预测值大于0.9可得5个大封闭圈远景区,其中测区南部①号远景区对应着已知油井S4井;②、③号油气远景区位于地震勘探所查明的托库1、2号构造,该两个构造位于沙雅隆起的东段,其西段即为1984年钻遇高产油气流的Sch2井,应是含油气性好的远景区;④、⑤号远景区位于大涝坝构造,是yh油田的组成部分。

bp神经网络需要多少样本,bp神经网络训练时间相关推荐

  1. 开源图神经网络框架DGL升级:GCMC训练时间从1天缩到1小时,RGCN实现速度提升291倍...

    乾明 编辑整理  量子位 报道 | 公众号 QbitAI 又一个AI框架迎来升级. 这次,是纽约大学.亚马逊联手推出图神经网络框架DGL. 不仅全面上线了对异构图的支持,复现并开源了相关异构图神经网络 ...

  2. BP神经网络最大训练次数,bp神经网络训练时间

    BP神经网络学习样本是不是越多越好! 这个没有明确要求,样本也不是越多越好.通常情况下,你的样本可以一部分用来做验证.加速你有100个样本,90%用来做训练,10%用来做验证等,当然,有时候还得留下1 ...

  3. Matlab:基于Matlab实现人工智能算法应用的简介(BP神经网络算法NN、SOFM神经网络)、案例应用(基于Matlab的GUI的方式创建/训练/预测神经网络)之详细攻略

    Matlab:基于Matlab实现人工智能算法应用的简介(BP神经网络算法NN.SOFM神经网络).案例应用(基于Matlab的GUI的方式创建/训练/预测神经网络)之详细攻略 目录

  4. DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释)、案例应用之详细攻略

    DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释).案例应用之详细攻略 相关文章:DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类 ...

  5. bp算法运行太慢_神经网络,BP算法的理解与推导

    原创,转载请注明出处. (常规字母代表标量,粗体字母代表向量,大写粗体字母代表矩阵) 这里假设你已经知道了神经网络的基本概念,并且最好看过BP算法. 可能你没有看懂,或者你跟我一样被各种公式搞晕了.尤 ...

  6. 吴恩达|机器学习作业4.0神经网络反向传播(BP算法)

    4.0.神经网络学习 1)题目: 在本练习中,您将实现神经网络的反向传播算法,并将其应用于手写数字识别任务.在之前的练习中,已经实现了神经网络的前馈传播,并使用Andrew Ng他们提供的权值来预测手 ...

  7. matlab神经网络(二)-bp神经网络,MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合...

    2.1 案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.该方法把未知系统看成是一个黑箱,首先用 ...

  8. 利用MATLAB 2016a进行BP神经网络的预测(含有神经网络工具箱)

    最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型.时间序列模型,GM(1,1)模型,可是自己在结合实际的工作内容,发现这几种模型预测的精度不是很高,于 ...

  9. bp神经网络实现人脸识别,卷积神经网络手势识别

    BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...

最新文章

  1. 记一次Java多线程程序调试经历:HttpClient 死锁
  2. Mockito的使用(二)——@InjectMocks、@Spy、@Mock
  3. 云服务器上安装jboss_jboss的使用和安装
  4. npm安装vue 解决VUE无法打开图形界面工具,输入vue ui无反应 vue-cli版本2.9.6无法升级 npm uninstall vue-cli卸载时失败
  5. php连接函数config,smarty内置函数config_load用法实例
  6. NFC 验证平台搭建
  7. 如何:通过现有代码创建 C++ 项目
  8. matlab向量归一化_已知近似的特征值,求特征向量
  9. java 字符串contain_如何使用java.lang.String.contains()方法
  10. NS-仿真实验--FTP
  11. c++中vector用法(涵盖算法题中知识点)
  12. 保险未起保是投保成功了吗?
  13. 释放空间后将指针置空
  14. 计算机组成原理 唐朔飞 思维导图
  15. python经纬度转换xy坐标公式_python 经纬度和平面坐标相互转换利用米勒坐标系
  16. 宝贵的核心珍藏_建立成功的神经网络的10个宝贵技巧
  17. 计算机平均工资公式数值型,平均工资的计算方式
  18. 内网用户通过域名或公网IP访问内部服务器的解决办法
  19. java多人聊天室与网络画板
  20. 访问网上计算机要输入密码,教大家访问电脑显示输入网络密码怎么办

热门文章

  1. 由mouseover和mouseenter引发的思考
  2. SIFT/SURF算法的作用
  3. 洛谷——B2015 计算并联电阻的阻值(java)
  4. 【mac】MacBook使用快捷键
  5. 自动化测试运行脚本(python)
  6. 高频电路之LC并联谐振回路
  7. Oracle数据库如何彻底卸载
  8. 软件测试周刊(第29期):找回我的「没有理由就是开心」
  9. DRAM BRANK
  10. FCM算法原理及matlab实现