『ゼロから作る Deep Learning』を読んで、Python ではなく C# でゼロから作ってみる続き。リベンジ。
今回はニューラルネットワークで使う関数を、NumSharp で実装してみた。実装するのは活性化関数であるステップ関数、シグモイド関数、ReLU 関数、そして出力層で使うソフトマックス関数。
using NumSharp; Console.WriteLine(nameof(StepFunction)); { var x = np.array(-1.0, 1.0, 2.0); var y = StepFunction(x); Console.WriteLine(y.ToString()); } Console.WriteLine(nameof(Sigmoid)); { var x = np.array(-1.0, 1.0, 2.0); var y = Sigmoid(x); Console.WriteLine(y.ToString()); } Console.WriteLine(nameof(ReLU)); { var x = np.array(-1.0, 1.0, 2.0); var y = ReLU(x); Console.WriteLine(y.ToString()); } Console.WriteLine(nameof(Softmax)); { var x = np.array(0.3, 2.9, 4.0); var y = Softmax(x); Console.WriteLine(y.ToString()); Console.WriteLine(np.sum(y, NPTypeCode.Double).ToString()); } Console.ReadLine(); static NDArray StepFunction(NDArray x) { var y = x > 0.0; return y.astype(NPTypeCode.Int32); } static NDArray Sigmoid(NDArray x) { return 1 / (1 + np.exp(x * -1)); } static NDArray ReLU(NDArray x) { return np.maximum(0.0, x); } static NDArray Softmax(NDArray a) { var c = np.max(a); var exp_a = np.exp(a - c); var sum_exp_a = np.sum(exp_a, NPTypeCode.Double); var y = exp_a / sum_exp_a; return y; }
.NET 6 で実行。
NumSharp では、メソッドによっては型もしくは NPTypeCode を指定しないと例外発生する場合があり、ハマったときは大抵そこ。sum とかね。慣れてきたけど。