你可以用随机数产生神经网络的训练和测试数据如:下面是产生范围在0.2~2的150*4的矩阵,前三列为输入数据,第四列为输出数据M=random('unif',0.2,2,150,4);p1=M(1:125,1:3);t1=M(1:125,4);p2=M(126:150,1:3 );t2=M(126:150,4);p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); a=10; %设置隐层节点数net=newff(minmax(pn),[a,1],{'tansig','purelin'}); net.trainParam.epochs=500; =0.1; =10;net=init(net);net=train(net,pn,tn);。
谷歌人工智能写作项目:神经网络伪原创
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}};12341234则(3,1)结果变成了三角形,如果你选前两个点 你会发现直接一条中间线就可以区分 这时候的你的结果跟之前4个点时有区别 so 你得增加样本 直到这些样本按照你所想要的方式分类 ,所以样本的多少 重要性体现在,样本得能反映所有的特征值(也就是输入值) ,样本多少或者特征(本例子指点的位置特征)决定的你的网络的训练结果,!
!!这是 我们反推出来的结果 。这里距离深度学习好像近了一步。另外,这个70行代码的神经网络没有保存你训练的网络 ,所以你每次运行都是重新训练的网络。
其实,在你训练过后 权值已经确定了下来,我们确定网络也就是根据权值,so只要把训练后的权值保存下来,将需要分类的数据按照这种权值带入网络,即可得到输出值,也就是一旦网络确定, 权值也就确定,一个输入对应一个固定的输出,不会再次改变!
个人见解。
最后附上作者的源码,作者的文章见开头链接下面的实现程序可以直接拿去使用,import .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){ = mobp; = 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。