-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
116 lines (97 loc) · 3.9 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using System;
using MathNet.Numerics.LinearAlgebra;
using System.Linq;
using System.Collections.Generic;
namespace neural_network
{
class Program
{
public static void Xor(bool batch = true)
{
Matrix<double>[] xTrain, yTrain;
if (batch)
{
xTrain = new Matrix<double>[]
{
Matrix<double>.Build.DenseOfArray(new double[,]
{
{0, 0},
{0, 1},
{1, 0},
{1, 1}
})
};
yTrain = new Matrix<double>[]
{
Matrix<double>.Build.DenseOfArray(new double[,] {
{0},
{1},
{1},
{0}
})
};
}
else
{
xTrain = new Matrix<double>[]
{
Matrix<double>.Build.DenseOfArray(new double[,] { {0, 0}}),
Matrix<double>.Build.DenseOfArray(new double[,] { {0, 1}}),
Matrix<double>.Build.DenseOfArray(new double[,] { {1, 0}}),
Matrix<double>.Build.DenseOfArray(new double[,] { {1, 1}})
};
yTrain = new Matrix<double>[]
{
Matrix<double>.Build.DenseOfArray(new double[,] { {0} }),
Matrix<double>.Build.DenseOfArray(new double[,] { {1} }),
Matrix<double>.Build.DenseOfArray(new double[,] { {1} }),
Matrix<double>.Build.DenseOfArray(new double[,] { {0} })
};
}
NeuralNetwork neuralNetwork = new NeuralNetwork();
int batchSize = xTrain[0].RowCount;
neuralNetwork.Add(new FCLayer(2, 3, batchSize));
neuralNetwork.Add(new ActivationLayer(new TanhActivationFunction()));
neuralNetwork.Add(new FCLayer(3, 1, batchSize));
neuralNetwork.Add(new ActivationLayer(new TanhActivationFunction()));
neuralNetwork.Use(new MSELossFunction());
neuralNetwork.Fit(xTrain, yTrain, 1000, 0.1);
var result = neuralNetwork.Predict(xTrain);
for (int i = 0; i < result.Length; i++)
{
Console.WriteLine($"pred: {result[i].ToString()}");
}
}
public static void Mnist(int maxSamples = 1000)
{
NeuralNetwork neuralNetwork = new NeuralNetwork();
int batchSize = 1;
neuralNetwork.Add(new FCLayer(28*28, 100, batchSize));
neuralNetwork.Add(new ActivationLayer(new TanhActivationFunction()));
neuralNetwork.Add(new FCLayer(100, 50, batchSize));
neuralNetwork.Add(new ActivationLayer(new TanhActivationFunction()));
neuralNetwork.Add(new FCLayer(50, 10, batchSize));
neuralNetwork.Add(new ActivationLayer(new TanhActivationFunction()));
var xTrain = new List<Matrix<double>>();
var yTrain = new List<Matrix<double>>();
int samples = 0;
foreach (var image in mnist.MnistLoader.ReadTrainingData())
{
xTrain.Add(image.Data);
yTrain.Add(image.Label);
samples++;
if (samples >= maxSamples) break;
}
neuralNetwork.Use(new MSELossFunction());
neuralNetwork.Fit(xTrain.ToArray(), yTrain.ToArray(), 50, 0.1);
}
static void Main(string[] args)
{
Console.WriteLine("xor..");
Xor();
Console.WriteLine();
Console.WriteLine("mnist..");
Mnist();
}
}
}