@Override public INDArray mean(@NonNull INDArray result, int... dimension) { return Nd4j.getExecutioner().exec(new Mean(this, null, result), dimension); }
@Override public List<SDVariable> doDiff(List<SDVariable> i_v1) { //If out = mean(in), then dL/dIn = 1/N * dL/dOut (broadcast to appropriate shape) //Note that N differs for "along dimension" vs. "whole array" reduce cases long n = f().getReductionLength(this); int rank = Shape.rankFromShape(arg().getShape()); SDVariable broadcastableGrad = f().reductionBroadcastableWithOrigShape(rank, dimensions, i_v1.get(0)); SDVariable ret = sameDiff.onesLike(arg()).div(n); //1/N with shape equal to input ret = ret.mul(broadcastableGrad); return Arrays.asList(ret); }
public SDVariable mean(SDVariable i_x, int... dimensions) { return new Mean(sameDiff(), i_x, dimensions).outputVariables()[0]; }
@Override public Op opForDimension(int index, int... dimension) { INDArray xAlongDimension = x.tensorAlongDimension(index, dimension); Mean ret; if (y() != null) ret = new Mean(xAlongDimension, y.tensorAlongDimension(index, dimension), xAlongDimension.length()); else ret = new Mean(x.tensorAlongDimension(index, dimension)); ret.setApplyFinalTransform(applyFinalTransform()); return ret; }
@Override public float getAndSetFinalResult(float accum) { if (applyFinalTransform()) { float f = accum / n(); this.finalResult = f; return f; } else { this.finalResult = accum; return accum; } }
@Override public float calculateFinalResult(float accum, long n) { if (applyFinalTransform()) return accum / n; return accum; }
@Override public IComplexNumber getAndSetFinalResult(IComplexNumber accum) { finalResultComplex = accum.div(n()); return finalResultComplex; } }
@Override public Op opForDimension(int index, int dimension) { INDArray xAlongDimension = x.vectorAlongDimension(index, dimension); Mean ret; if (y() != null) ret = new Mean(xAlongDimension, y.vectorAlongDimension(index, dimension), xAlongDimension.length()); else ret = new Mean(x.vectorAlongDimension(index, dimension)); ret.setApplyFinalTransform(applyFinalTransform()); return ret; }
@Override public double getAndSetFinalResult(double accum) { double result; if (applyFinalTransform()) { result = accum / n(); this.finalResult = result; } else { result = accum; this.finalResult = result; } return result; }
@Override public double calculateFinalResult(double accum, long n) { if (applyFinalTransform()) return accum / n; return accum; }
/** * Returns the overall mean of this ndarray * * @param dimension the dimension to getScalar the mean along * @return the mean along the specified dimension of this ndarray */ @Override public INDArray mean(int... dimension) { return Nd4j.getExecutioner().exec(new Mean(this), dimension); }
@Override public void init(INDArray x, INDArray y, INDArray z, long n) { super.init(x, y, z, n); if (Nd4j.executionMode == OpExecutioner.ExecutionMode.JAVA) { if (biasCorrected) this.bias = Nd4j.getExecutioner().execAndReturn(new Bias(x)).getFinalResult().doubleValue(); mean = Nd4j.getExecutioner().execAndReturn(new Mean(x)).getFinalResult().doubleValue(); } }
/** * Returns the overall mean of this ndarray * * @param dimension the dimension to getScalar the mean along * @return the mean along the specified dimension of this ndarray */ @Override public INDArray mean(int... dimension) { return Nd4j.getExecutioner().exec(new Mean(this), dimension); }
@Override public INDArray mean(INDArray result, int... dimension) { return Nd4j.getExecutioner().exec(new Mean(this, null, result), dimension); }
@Override public void exec() { this.mean = Nd4j.getExecutioner().execAndReturn(new Mean(x)).getFinalResult().doubleValue(); INDArray xMinusMean = x.sub(mean); double sum = Nd4j.getExecutioner().execAndReturn(new Sum(xMinusMean)).getFinalResult().doubleValue(); this.finalResult = sum; }
@Override public void init(INDArray x, INDArray y, INDArray z, long n) { super.init(x, y, z, n); if (Nd4j.executionMode == OpExecutioner.ExecutionMode.JAVA) { if (biasCorrected) this.bias = Nd4j.getExecutioner().execAndReturn(new Bias(x)).getFinalResult().doubleValue(); mean = Nd4j.getExecutioner().execAndReturn(new Mean(x)).getFinalResult().doubleValue(); } }
private static double getAverageFloatMaxArray(INDArray array) { INDArray max = Nd4j.getExecutioner().exec(new Max(array), 0); int maxValidIndex = max.gt(0).sumNumber().intValue(); INDArray truncatedMax = maxValidIndex > 0 ? max.get(NDArrayIndex.all(), NDArrayIndex.interval(0, maxValidIndex)) : max; return Nd4j.getExecutioner().execAndReturn(new Mean(truncatedMax)).getFinalResult().doubleValue(); }
@Override public void exec() { if (biasCorrected) this.bias = Nd4j.getExecutioner().execAndReturn(new Bias(x)).getFinalResult().doubleValue(); this.mean = Nd4j.getExecutioner().execAndReturn(new Mean(x)).getFinalResult().doubleValue(); INDArray xSubMean = x.sub(mean); INDArray squared = xSubMean.muli(xSubMean); double accum = Nd4j.getExecutioner().execAndReturn(new Sum(squared)).getFinalResult().doubleValue(); getAndSetFinalResult(accum); this.z = Nd4j.scalar(this.finalResult); }