我想在C#中实现神经网络和深度学习代码。我的教材上给出的示例代码是用Python编写的,因此我正在尝试将它们转换为C#。
我的问题是,使用numpy计算点积比我从头开始编写的C#代码要快得多。
尽管我的numpy代码在计算1000次点积时只需几秒钟,但我的C#代码花费的时间要比它长得多。
这是我的问题。我该如何让我的C#代码更快?
下面是numpy代码:
C:\temp>more dot.py
from datetime import datetime
import numpy as np
W = np.random.randn(784, 100)
x = np.random.randn(100, 784)
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
for i in range(0,1000):
np.dot(x, W)
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S"))
C:\temp>\Python35\python.exe dot.py
2017/02/08 00:49:14
2017/02/08 00:49:16
C:\temp>
以下是C#代码:
public static double[,] dot(double[,] a, double[,] b)
{
double[,] dot = new double[a0, b1];
for (int i = 0; i < a.GetLength(0); i++)
{
for (int j = 0; j < b.GetLength(1); j++)
{
// the next loop looks way slow according to the profiler
for (int k = 0; k < b.GetLength(0); k++)
dot[i, j] += a[i, k] * b[k, j];
}
}
return dot;
}
static void Main(string[] args)
{
// compatible function with np.random.randn()
double[,] W = random_randn(784, 100);
double[,] x = random_randn(100, 784);
Console.WriteLine(DateTime.Now.ToString("F"));
for (int i = 0; i < 1000; i++)
dot(W, x);
Console.WriteLine(DateTime.Now.ToString("F"));
}
敬礼,