MNIST 训练时间 CPU
MNIST training time in CPU
我在 Java
中创建了一个简单的前馈神经网络库 - 我需要一个基准来比较我的库并对其进行故障排除。
计算机规格:
- AMD 锐龙 7 2700X 八核处理器
- RAM 16.0 GB
- WINDOWS 10 OS
- JVM 参数:
-Xms1024m
-Xmx8192m
请注意,我没有使用 GPU。
请列出以下规格:
- 计算机规格?
- GPU 或 CPU(提供 CPU 但 GPU 是很好的信息)
- 输入数量784(这是固定的)
- 对于每一层:
- 多少个节点?
- 什么激活函数?
- 输出层:
- 多少个节点? (10 如果分类或 1 作为回归)
- 什么激活函数?
- 什么损失函数?
- 什么梯度下降算法(即:vanilla)
- 批量大小是多少?
- 多少个epoch? (不是迭代)
- 最后,训练时间和准确率是多少?
非常感谢
编辑
只是想了解一下我正在处理的事情。我用
创建了一个网络
- 784个输入节点
- 784 隐藏层 0
- 隐藏层 1 中有 256 个
- 隐藏层 2 中有 128 个
- 1 个输出节点
- 小批量大小 5
- 16 个线程用于反向传播
它已经训练了约 8 个小时,只完成了 694 次迭代——这甚至不到一个 epoch 的 20%。
我看到一些说法,这是如何在几分钟内完成的?
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));
}
我不太清楚您要寻找的基准,是从训练角度来看的性能还是准确性?为了准确性,有一些工具可以在预测和实际之间进行比较,因此您可以衡量性能
我在 Java
中创建了一个简单的前馈神经网络库 - 我需要一个基准来比较我的库并对其进行故障排除。
计算机规格:
- AMD 锐龙 7 2700X 八核处理器
- RAM 16.0 GB
- WINDOWS 10 OS
- JVM 参数:
-Xms1024m
-Xmx8192m
请注意,我没有使用 GPU。
请列出以下规格:
- 计算机规格?
- GPU 或 CPU(提供 CPU 但 GPU 是很好的信息)
- 输入数量784(这是固定的)
- 对于每一层:
- 多少个节点?
- 什么激活函数?
- 输出层:
- 多少个节点? (10 如果分类或 1 作为回归)
- 什么激活函数?
- 什么损失函数?
- 什么梯度下降算法(即:vanilla)
- 批量大小是多少?
- 多少个epoch? (不是迭代)
- 最后,训练时间和准确率是多少?
非常感谢
编辑
只是想了解一下我正在处理的事情。我用
创建了一个网络- 784个输入节点
- 784 隐藏层 0
- 隐藏层 1 中有 256 个
- 隐藏层 2 中有 128 个
- 1 个输出节点
- 小批量大小 5
- 16 个线程用于反向传播 它已经训练了约 8 个小时,只完成了 694 次迭代——这甚至不到一个 epoch 的 20%。
我看到一些说法,这是如何在几分钟内完成的?
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));
}
我不太清楚您要寻找的基准,是从训练角度来看的性能还是准确性?为了准确性,有一些工具可以在预测和实际之间进行比较,因此您可以衡量性能