GPU神经网络和JAVA神经网络速度对比

分别用CUDA和JAVA制作两个三层的n*m*k的神经网络,使输入一致,目标函数一致,迭代次数一致,通过调节节点数量测量时间比较这两个网络到底哪个快。

网络的输入节点的初始化方式为

for(inta=0 ;a<n ;a++)

           {

              x[a]=(double)a/(n);

           }

目标函数y[0]=1;y[1]=0;

权重都初始化为0.1,用随机梯度下降,不用偏置

迭代次数都是100次。

得到表格


节点数量 网络结构 迭代次数 java用时 y[0] y[1] CUDA用时 y[0] y[1] java用时/CUDA用时 java速度/CUDA速度
600 3*100*2 100 47 0.9999999960729808 2.048728729816881E-211  657 0.9999999960729809   0 0.071537291 13.9787234
3000 3*500*2 100 62 0.9999999999505671 0 641 0.9999999999505671 0 0.096723869 10.33870968
20000 100*100*2 100 62 0.9999917229035667  0 751 0.9999917229035668 0 0.082556591 12.11290323
400000 1000*200*2 100 296 0.9999999979392669 0 1532 0.9999999979392669 0 0.193211488 5.175675676
2400000 4000*300*2 100 2532 0.9999999999999065 0 6958 0.9999999999999065 0 0.363897672 2.748025276
   
24000000 4000*3000*2 100 56305 1 0 74692 1 0 0.753829058 1.326560696
24000000 4000*3000*2 100 56415 1 0 74317 1 0 0.759112989 1.317326952
   
40000000 5000*4000*2 100 97646 1 0 128027 1 0 0.762698493 1.311134097
40000000 5000*4000*2 100 97531 1 0 127416 1 0 0.765453318 1.306415396
40000000 5000*4000*2 100 96139 1 0 127592 1 0 0.753487679 1.327161714



比如第一组网络结构3*100*2共600个节点,迭代次数100次,java用时47ms,cuda用时657ms,

java第100次y[0]= 0.9999999960729808 ;y[1]=0

Cuda第100次y[0]= 0.9999999960729809 ;y[1]=0

最后一位小数不一致时因为四舍五入规则造成的。

当节点数量超过240万以后经过100次迭代输出已经都是1和0,已经没有区分度只是用来测量速度。

从表格看出来当节点数量只有600个时候java的速度甚至是cuda的13.9倍,很意外的是即便节点数量有4000万个java的速度依然是cuda 的1.32倍。




你可能感兴趣的:(进化)