public override void ComputeOutput() { FilteredImageChannel[] channels = new FilteredImageChannel[FilterNumber]; FilteredImage img = (FilteredImage)PreviousLayer.GetData(); bool samePadding = (Padding == "same") ? true : false; Task[] tasks = new Task[FilterNumber]; for (int i = 0; i < FilterNumber; i++) { int taski = 0 + i; tasks[taski] = Task.Run(() => { channels[taski] = Filters[taski].Convolve(img, samePadding); }); } Task.WaitAll(tasks); //for (int i = 0; i < FilterNumber; i++) //{ // channels[i] = Filters[i].Convolve(img, samePadding); //} OutputBeforeActivation = new FilteredImage(FilterNumber, channels); OutputImage = ActivationFunction.Activate(OutputBeforeActivation); }
public Array3D FormOutput(Array3D input) { var output = new Array3D(Neurals.Count); for (var i = 0; i < output.Count; i++) { var summ = Neurals[i].FormOutput(input); output[i] = ActivationFunction.Activate(summ); } return(output); }
private void Convolution(Array3D input, Array3D ouput) { foreach (var filter in Neurals) { var result = new Array2D(ouput.Height, ouput.Width); for (var i = 0; i <= input.Height - filter.Weights.Height; i += Stride) { for (var j = 0; j <= input.Width - filter.Weights.Width; j += Stride) { var output = Array3D.Merge(input, filter.Weights, i, j) + filter.Bias; result[i / Stride, j / Stride] = ActivationFunction.Activate(output); } } ouput.Insert(result); } }
public override void ComputeOutput() { FlattenedImage previous = (FlattenedImage)PreviousLayer.GetData(); Task[] tasks = new Task[NumberOfUnits]; for (int i = 0; i < NumberOfUnits; i++) { int taski = 0 + i; tasks[taski] = Task.Run(() => { Output.Values[taski] = Units[taski].ComputeOutput(previous); }); } Task.WaitAll(tasks); Output = ActivationFunction.Activate(Output); }
public MatrixFloat Activate() { return((Neurons + _bias).Apply((x) => ActivationFunction.Activate(x))); }
public Array3D FormOutput(Array3D input) { var output = ActivationFunction.Activate(input); return(output); }