MNIST 训练时间 CPU

MNIST training time in CPU

我在 Java 中创建了一个简单的前馈神经网络库 - 我需要一个基准来比较我的库并对其进行故障排除。

计算机规格:

请注意,我没有使用 GPU。

请列出以下规格:

非常感谢

编辑

只是想了解一下我正在处理的事情。我用

创建了一个网络

我看到一些说法,这是如何在几分钟内完成的?

784 input nodes 784 in hidden layer 0 256 in hidden layer 1 128 in hidden layer 2 1 output nodes mini-batch size 5

你可以做得更薄:784 => 784/2、160、40,批量大小至少为 50。

并且是 java 中的事件,通常很慢,天真的解决方案必须 运行 像 几分钟 完成 train 表示 10~20 epoch.

你是如何实施的?不要告诉你有一个神经元 class 并且每个神经元都由一个实例表示。

它不应该 运行 这么慢。我知道的优化是表示点转置的第二个矩阵并使用 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));


}

我不太清楚您要寻找的基准,是从训练角度来看的性能还是准确性?为了准确性,有一些工具可以在预测和实际之间进行比较,因此您可以衡量性能