public double[,,] BackPropagation(double[,,] dy) { var dx = new double[Inputs.GetLength(0), Inputs.GetLength(1), Inputs.GetLength(2)]; for (int f = 0; f < Filters.Count; f++) { var dyForLayerF = dy.GetLayer(f).To3DArray(); var dw = Convolution(dyForLayerF); var dxTemp = ReverseConvolution(dy, Filters[f]); Filters[f] = Filters[f].Plus(dw, Epsilon); dx = dx.Plus(dxTemp); } return(dx); }