class OutputLayer extends AbstractLayer {

    @Override
    public void forward() {                
        outputs.copyFrom(biases);  // reset output to bias value        
        for (int outCol = 0; outCol < outputs.getCols(); outCol++) {  // for all neurons in this layer  | ForkJoin split this in two until you reach size which makes sense: number of calculations = inputCols * outputCols           
            for (int inCol = 0; inCol < inputs.getCols(); inCol++) {
                outputs.add(outCol, inputs.get(inCol) * weights.get(inCol, outCol));    // add weighted sum
            }                        
            //outputs.set(outCol, ActivationFunctions.sigmoid(outputs.get(outCol)));      // apply activation function - could be tanh too
            outputs.set(outCol, ActivationFunctions.calc(activationType, outputs.get(outCol)));
        }             
    }

    public  OutputLayer(int width);
    public  OutputLayer(int width, ActivationType activationFunction);
    public  OutputLayer(String[] labels);
    public  OutputLayer(String[] labels, ActivationType activationFunction);

}