public NetworkEvaluator(NeuralNetwork network, float learningRate = 0.0015f, int simultaniousLayers = 16) { LearningRate = learningRate; _simultaniousLayers = simultaniousLayers; foreach (var layer in network.Layers) { _layers.Add(EvaluatorLayer.CreateFromLayer(layer, simultaniousLayers)); } }
public override JobHandle BackpropigateLayer(EvaluatorLayer currentLayerState, EvaluatorLayer nextLayerState, int count, JobHandle jobHandleToWaitOn) { var backPropigateLayerJob = new LinearLayerErrorEvaluator() { NextLayerWeights = nextLayerState.ModelLayer.Weights, NextLayerError = nextLayerState.SliceError(0, count), WeightedActivation = currentLayerState.SliceWeightedInputs(0, count), ErrorOutput = currentLayerState.SliceError(0, count) }; return(backPropigateLayerJob.Schedule(currentLayerState.Error.Dimensions.y, 4, jobHandleToWaitOn)); }
public override JobHandle EvaluateLayer(EvaluatorLayer lastLayerState, EvaluatorLayer currentLayerState, int count, JobHandle jobHandleToWaitOn) { var layerEvaluatorJob = new LinearNeuronEvaluator() { SourceActivation = lastLayerState.SliceActivations(0, count), LayerWeightedInputs = currentLayerState.SliceWeightedInputs(0, count), LayerActivation = currentLayerState.SliceActivations(0, count), Weights = Weights, Biases = Biases }; return(layerEvaluatorJob.Schedule(currentLayerState.OutputActivation.Dimensions.y, 4, jobHandleToWaitOn)); }
public abstract JobHandle BackpropigateLayer(EvaluatorLayer currentLayerState, EvaluatorLayer nextLayerState, int count, JobHandle jobHandleToWaitOn);
public abstract JobHandle EvaluateLayer(EvaluatorLayer lastLayerState, EvaluatorLayer currentLayerState, int count, JobHandle jobHandleToWaitOn);
public override JobHandle BackpropigateLayer(EvaluatorLayer currentLayerState, EvaluatorLayer nextLayerState, int count, JobHandle jobHandleToWaitOn) { //Never needs to be evaluated ? throw new NotImplementedException(); }