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>
</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 のサンプルと同じ結果が出力できた。
まだ先は長いな。