私はC#でニューラルネットワークと深い学習コードを実装しようとしています。私のテキストブックのサンプルコードはPythonで書かれているので、私はそれらをC#に変換しようとしています。ドットプロダクトを計算するために私の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"));
}
よろしく、
は、なぜあなたは最初からニューラルネットワークを実装していますか?学習の練習であれば、コードの実行速度はそれほど重要ではありません。それがうまく機能するようにするには、既に書かれた高品質のソフトウェアを使用してください。 TensorFlow、H2O、Torchのようなニューラルネットワークモデルを持つ多くのパッケージがあります。それらはC#で一人でできるものより多くの機能と高速性を備えています。 –
右。 C#と深い学習の両方を学ぶためだけのものですが、ドットプロダクトを計算するのが予想していた速度より遅いことがわかりました。教科書の例(C#に移植)を実行するのは苦労しました。ですから、私はパフォーマンスを改善したいと思います。そして、私は、パフォーマンスとより良い実装の面で、私の将来の生産システムにいくつかの既存のライブラリを使用するつもりです。 – snaga