public void NetworkLockedExceptionLayer() { var net = new Sequential(new QuadraticCost(), new NesterovMomentum(0.03)); net.CreateLayer(new Dense(3, new Tanh())); net.CreateLayer(new Output(1, new Tanh())); net.InitNetwork(); net.CreateLayer(new Dense(3, new Tanh())); }
public void ConvolutionalMnist() { // Load Data var lines = File.ReadAllLines("..\\..\\..\\..\\..\\datasets\\mnist_train.csv").ToList(); var mnistLables = new List <Matrix>(); var mnistData = new List <Matrix>(); for (var j = 1; j < lines.Count; j++) { var t = lines[j]; var data = t.Split(',').ToList(); mnistLables.Add(new Matrix(1, 1).Fill(int.Parse(data[0]))); var mnist = new Matrix(784, 1); for (var i = 1; i < data.Count; i++) { mnist[i - 1, 0] = double.Parse(data[i]); } mnistData.Add(mnist); } // Create Network var net = new Sequential(new QuadraticCost(), new NesterovMomentum(0.03)); net.CreateLayer(new Convolutional(784, new Average(), new Tanh())); net.CreateLayer(new Convolutional(100, new Average(), new Tanh())); net.CreateLayer(new Dense(100, new Tanh())); net.CreateLayer(new Output(10, new Softmax())); net.InitNetwork(); // Train Network for (var i = 0; i < 800; i++) { net.Train(mnistData[i % mnistData.Count], mnistLables[i % mnistData.Count]); } // Write Acc Result // Trace.WriteLine(" Metrics Accuracy: " + acc); // Assert.IsTrue(acc > 80.0, "Network did not learn MNIST"); }
public void AdaDeltaTest() { var net = new Sequential(new QuadraticCost(), new AdaDelta(0.03)); net.CreateLayer(new Dense(3, new Tanh())); net.CreateLayer(new Dense(3, new Tanh())); net.CreateLayer(new Dense(3, new Tanh())); net.CreateLayer(new Output(1, new Tanh())); net.InitNetwork(); var inputs = new List <Matrix>(); var outputs = new List <Matrix>(); // 0 0 0 => 0 inputs.Add(new Matrix(new[, ] { { 0.0 }, { 0.0 }, { 0.0 } })); outputs.Add(new Matrix(new[, ] { { 0.0 } })); // 0 0 1 => 1 inputs.Add(new Matrix(new[, ] { { 0.0 }, { 0.0 }, { 1.0 } })); outputs.Add(new Matrix(new[, ] { { 1.0 } })); // 0 1 0 => 1 inputs.Add(new Matrix(new[, ] { { 0.0 }, { 1.0 }, { 0.0 } })); outputs.Add(new Matrix(new[, ] { { 1.0 } })); // 0 1 1 => 0 inputs.Add(new Matrix(new[, ] { { 0.0 }, { 1.0 }, { 1.0 } })); outputs.Add(new Matrix(new[, ] { { 1.0 } })); // 1 0 0 => 1 inputs.Add(new Matrix(new[, ] { { 1.0 }, { 0.0 }, { 0.0 } })); outputs.Add(new Matrix(new[, ] { { 1.0 } })); // 1 0 1 => 0 inputs.Add(new Matrix(new[, ] { { 1.0 }, { 0.0 }, { 1.0 } })); outputs.Add(new Matrix(new[, ] { { 0.0 } })); // 1 1 0 => 0 inputs.Add(new Matrix(new[, ] { { 1.0 }, { 1.0 }, { 0.0 } })); outputs.Add(new Matrix(new[, ] { { 0.0 } })); // 1 1 1 => 1 inputs.Add(new Matrix(new[, ] { { 1.0 }, { 1.0 }, { 1.0 } })); outputs.Add(new Matrix(new[, ] { { 1.0 } })); for (var i = 0; i < 8; i++) { net.Train(inputs[i % 8], outputs[i % 8]); } var correct = 0; for (var i = 0; i < 10; i++) { correct += Math.Abs(net.Forward(inputs[0])[0, 0]) < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[1])[0, 0]) - 1 < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[2])[0, 0]) - 1 < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[3])[0, 0]) < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[4])[0, 0]) - 1 < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[5])[0, 0]) < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[6])[0, 0]) < 0.1 ? 1 : 0; correct += Math.Abs(net.Forward(inputs[7])[0, 0]) - 1 < 0.1 ? 1 : 0; } var acc = correct / 80.0 * 100.0; Trace.WriteLine(" Acc: " + acc); Assert.IsTrue(acc > 80.0, "Network did not learn XOR"); }
public void DenseMnist() { // Load Train Data var lines = File.ReadAllLines("..\\..\\..\\..\\..\\datasets\\mnist_train.csv").ToList(); var mnistLables = new List <Matrix>(); var mnistData = new List <Matrix>(); for (var j = 1; j < lines.Count; j++) { var t = lines[j]; var data = t.Split(',').ToList(); mnistLables.Add(new Matrix(10, 1).Fill(0)); mnistLables[j - 1][int.Parse(data[0]), 0] = 1.0; var mnist = new Matrix(784, 1); for (var i = 1; i < data.Count; i++) { mnist[i - 1, 0] = double.Parse(data[i]); } mnistData.Add(mnist); } // Load Test Data var testlines = File.ReadAllLines("..\\..\\..\\..\\..\\datasets\\mnist_test.csv").ToList(); var mnistTestLables = new List <Matrix>(); var mnistTestData = new List <Matrix>(); for (var j = 1; j < testlines.Count; j++) { var t = testlines[j]; var data = t.Split(',').ToList(); mnistTestLables.Add(new Matrix(10, 1).Fill(0)); mnistTestLables[j - 1][int.Parse(data[0]), 0] = 1.0; var mnist = new Matrix(784, 1); for (var i = 1; i < data.Count; i++) { mnist[i - 1, 0] = double.Parse(data[i]); } mnistTestData.Add(mnist); } // Create Network var net = new Sequential(new CategoricalCrossEntropy(), new Adam(0.3), null, 128); net.CreateLayer(new Dense(784, new Relu())); net.CreateLayer(new Dense(128, new Relu())); net.CreateLayer(new Output(10, new Softmax())); net.InitNetwork(); // Train Network for (var i = 0; i < mnistData.Count / 100; i++) { net.Train(mnistData[i % mnistData.Count], mnistLables[i % mnistData.Count]); } // Test Network for (var i = 0; i < mnistTestData.Count / 100; i++) { var mat = net.Forward(mnistTestData[i % mnistTestData.Count]); var matx = mnistTestLables[i % mnistTestData.Count]; } Trace.WriteLine(" Metrics Accuracy: "); //Assert.IsTrue(acc > 80.0, "Network did not learn MNIST"); }