public override MultiMatrix slideOver(MultiMatrix inData) { var outData = new MultiMatrix(getOutputDims(inData)); foreach (var coords in outData.AllCoords()) { outData.setAt(coords, getSumAt(inData, coords.mapWith(Stride, (c, s) => c * s))); } return(outData); }
public override MultiMatrix getGradientInput(MultiMatrix inData, MultiMatrix nextGradient) { var gradientIn = MultiMatrix.Build.repeat(inData.Dimensions, 0); foreach (var coords in nextGradient.AllCoords()) { foreach (var offset in Weights.AllCoords()) { gradientIn.addAt(coords.add(offset), nextGradient.at(coords) * Weights.at(offset)); } } return(gradientIn); }
}// TODO check ? public MultiMatrix getGradientWeights(MultiMatrix inData, MultiMatrix nextGradient) { var gradientW = new MultiMatrix(this.Dimensions); foreach (var coord in nextGradient.AllCoords()) { foreach (var offset in this.weights.AllCoords()) { var nearbyCoord = coord.add(offset); gradientW.addAt(offset, nextGradient.at(coord) * inData.at(nearbyCoord)); } } return(gradientW); }