C# でゼロから Deep Learning を実装する挑戦の続き。 今回は第 4 章で紹介されている損失関数(2乗和誤差と交差エントロピー誤差)を実装してみた。
using MathNet.Numerics.LinearAlgebra; using System; using System.Linq; namespace LossFunctionSample { class Program { static void Main(string[] args) { var t = Vector<double>.Build.DenseOfArray(new double[] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }); var y = Vector<double>.Build.DenseOfArray(new double[] { 0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0 }); Console.WriteLine("2乗和誤差"); Console.WriteLine(MeanSquaredError(y, t)); Console.WriteLine("交差エントロピー誤差"); Console.WriteLine(CrossEntropyError(y, t)); Console.ReadLine(); } /// <summary> /// 2乗和誤差 /// </summary> static double MeanSquaredError(Vector<double> y, Vector<double> t) { return 0.5 * (y - t).Sum(x => x * x); } /// <summary> /// 交差エントロピー誤差 /// </summary> static double CrossEntropyError(Vector<double> y, Vector<double> t) { var delta = 1e-7; return -(y + delta).PointwiseLog().PointwiseMultiply(t).Sum(); } } }
実行結果は次の通り。 『ゼロから作る Deep Learning』に載っている Python のサンプルと同じ結果が出力できた。
まだ先は長いな。