void SelfTrainNetwork() { _NetSelfTrain = true; var inputlayer = new DenseLayer(10, 4, Activation.Sigmoid()); var hiddenlayer1 = new DenseLayer(inputlayer, Activation.Sigmoid(), 100, LayerType.Hidden); var hiddenlayer2 = new DenseLayer(hiddenlayer1, Activation.Sigmoid(), 20, LayerType.Hidden); var outputlayer = new DenseLayer(hiddenlayer2, Activation.Linear(), 9, LayerType.Output); Network = outputlayer; Network.Initilize(); _NetSelfTrain = true; }
IEnumerator TrainNetwork() { var inputlayer = new DenseLayer(10, 4, Activation.ReLU()); var hiddenlayer1 = new DenseLayer(inputlayer, Activation.ReLU(), 30, LayerType.Hidden); var hiddenlayer2 = new DenseLayer(hiddenlayer1, Activation.ReLU(), 500, LayerType.Hidden); var outputlayer = new DenseLayer(hiddenlayer1, Activation.TangesHyperbolic(), 2, LayerType.Output); Network = outputlayer; outputlayer.Initilize(); var trainingdata = GenerateTrainingData(); int epoch = 0; int epochsize = trainingdata.GetLength(0); var epocherror = float.MaxValue; yield return(0); while (epocherror > 10 && _Training) { yield return(0); epocherror = 0f; epoch++; for (var t = 0; t < epochsize; t++) { var truth = trainingdata[t, 1]; var input = trainingdata[t, 0]; var output = (Tensor1D)outputlayer.Forward(input); var dif = output - truth; var sq = dif * dif; epocherror += (float)Math.Pow(sq.ElementSum(), 2); outputlayer.Backward(dif); } ErrorText.text = epocherror.ToString(); } ErrorText.text = ("Finished!"); _Training = false; }