public static void SimpleLogisticRegression() { //const int N = 8; //const int D = 5; //const int P = 3; //const double learn = 0.001; const int N = 100; const int D = 784; const int P = 10; const double learn = 0.00005; var input = Variable <double>(); var label = Variable <double>(); var weights = Parameter(0.01 * RandomUniform <double>(Shape.Create(D, P))); var pred = Dot(input, weights); var loss = L2Loss(pred, label); var ctx = Context.GpuContext(0); var opt = new GradientDescentOptimizer(ctx, loss, learn); // set some data var inputData = new double[N, D]; var matA = new double[D, P]; var matB = new double[N, P]; NormalRandomArray(inputData); NormalRandomArray(matA); NormalRandomArray(matB); var labelData = Dot(inputData, matA).Add(matB.Mul(0.1)); opt.AssignTensor(input, inputData.AsTensor()); opt.AssignTensor(label, labelData.AsTensor()); opt.Initalize(); for (var i = 0; i < 800; ++i) { opt.Forward(); opt.Backward(); opt.Optimize(); if (i % 20 == 0) { Console.WriteLine($"loss = {opt.GetTensor(loss).ToScalar()}"); } } }