我在readarray -t ADDR < <(ls -la)
中创建了一个简单的前馈神经网络库-我需要一个基准来对我的库进行比较和故障排除。
计算机规格:
Java
-Xms1024m
请注意,我没有使用GPU。
请列出以下规格:
非常感谢您
修改
只给我一个我正在处理的想法。我用
创建了一个网络在我看到一些要求后,如何在几分钟内完成?
答案 0 :(得分:1)
784个输入节点 784位于隐藏层0 隐藏层1中的256 隐藏层2中的128 1个输出节点 迷你批量5
您可以做得更细:784 => 784 / 2、160、40,批处理大小至少为50。
是的,在Java中,是的,通常比较慢,天真的解决方案必须像几分钟 完成那样运行,意味着10〜20个纪元。
您如何实施它?不要告诉您有一个神经元类,并且每个神经元都由一个实例表示。
它不应该这么慢地运行。我知道的最优化是代表点转置的第二矩阵并使用strassen-vinograd算法,但是您在其他方面做错了
看看我的点实现:
import java.util.Arrays;
public class JTensor {
private float [] data;// contains data.length
private int width;
public static void dot_T(double [] out, double [] x, double [] y, int wy) {
int iOut = 0;
for (int ix = 0; ix < x.length; ix+=wy) {
for (int iy = 0; iy < y.length;) {
int ixv = ix;
int iyLimit = iy + wy;
double summ = 0;
for(;iy <iyLimit;) {
summ += x[ixv++] * y[iy++];
}
out[iOut++] = summ;
}
}
}
public static void main(String[] args) {
System.out.println("generate random");
int size = 1000;
double []x = new double [size * size];
double []y = new double [size * size];
double []out = new double [size * size];
for (int i = 0; i < x.length; i++) {
x[i] = (double)i ;
}
for (int i = 0; i < y.length; i++) {
y[i] = (double)i ;
}
System.out.println("start ");
long start = System.nanoTime();
JTensor.dot_T(out, x,y,size);
long end = System.nanoTime();
System.out.println("elapsed " + ((end- start)/ (1000.0*1000*1000)));
//System.out.println(Arrays.toString( x));
//System.out.println(Arrays.toString( y));
//System.out.println(Arrays.toString( out));
}
答案 1 :(得分:0)
我不是很清楚您要寻找的基准,是从培训角度来看还是性能还是准确性?为了提高准确性,有一些工具可以将预测值与实际值进行比较,以便您评估效果