org.nd4j.linalg.factory.Nd4j.gemm()方法的使用及代码示例

x33g5p2x  于2022-01-24 转载在 其他  
字(11.6k)|赞(0)|评价(0)|浏览(158)

本文整理了Java中org.nd4j.linalg.factory.Nd4j.gemm()方法的一些代码示例,展示了Nd4j.gemm()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Nd4j.gemm()方法的具体详情如下:
包路径:org.nd4j.linalg.factory.Nd4j
类名称:Nd4j
方法名:gemm

Nd4j.gemm介绍

[英]Matrix multiply: Implements c = alphaop(a)op(b) + betac where op(X) means transpose X (or not) depending on setting of arguments transposeA and transposeB.
Note that matrix c MUST be fortran order, have zero offset and have c.data().length == c.length(). An exception will be thrown otherwise.
Don't use this unless you know about level 3 blas and NDArray storage orders.
[中]矩阵乘法:实现c=alpha
op(a)op(b)+betac,其中op(X)表示转置X(或不转置),具体取决于参数transpose和transposeB的设置。
注意,矩阵c必须是fortran顺序,偏移量为零,并且具有c.data()。长度==c.长度()。否则将引发异常。
除非你了解3级blas和NDArray存储订单,否则不要使用此功能。

代码示例

代码示例来源:origin: guoguibing/librec

  1. @Override
  2. public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon) {
  3. //If this layer is layer L, then epsilon is (w^(L+1)*(d^(L+1))^T) (or equivalent)
  4. INDArray z = this.preOutput(true); //Note: using preOutput(INDArray) can't be used as this does a setInput(input) and resets the 'appliedDropout' flag
  5. //INDArray activationDerivative = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf().getLayer().getActivationFunction(), z).derivative());
  6. // INDArray activationDerivative = conf().getLayer().getActivationFn().getGradient(z);
  7. // INDArray delta = epsilon.muli(activationDerivative);
  8. INDArray delta = layerConf().getActivationFn().backprop(z, epsilon).getFirst(); //TODO handle activation function params
  9. if (maskArray != null) {
  10. applyMask(delta);
  11. }
  12. Gradient ret = new DefaultGradient();
  13. INDArray weightGrad = gradientViews.get(CDAEParamInitializer.WEIGHT_KEY); //f order
  14. Nd4j.gemm(input, delta, weightGrad, true, false, 1.0, 0.0);
  15. INDArray userWeightGrad = gradientViews.get(CDAEParamInitializer.USER_WEIGHT_KEY); //f order
  16. userWeightGrad.assign(delta);
  17. INDArray biasGrad = gradientViews.get(CDAEParamInitializer.BIAS_KEY);
  18. biasGrad.assign(delta.sum(0)); //biasGrad is initialized/zeroed first
  19. ret.gradientForVariable().put(CDAEParamInitializer.WEIGHT_KEY, weightGrad);
  20. ret.gradientForVariable().put(CDAEParamInitializer.BIAS_KEY, biasGrad);
  21. ret.gradientForVariable().put(CDAEParamInitializer.USER_WEIGHT_KEY, userWeightGrad);
  22. INDArray epsilonNext = params.get(CDAEParamInitializer.WEIGHT_KEY).mmul(delta.transpose()).transpose();
  23. //epsilonNext = null;
  24. return new Pair<>(ret, epsilonNext);
  25. }

代码示例来源:origin: deeplearning4j/nd4j

  1. /**
  2. *
  3. * matrix multiply: implements op(a)*op(b)
  4. *
  5. * where op(x) means transpose x (or not) depending on
  6. * setting of arguments transposea and transposeb.<br>
  7. * so gemm(a,b,false,false) == a.mmul(b), gemm(a,b,true,false) == a.transpose().mmul(b) etc.
  8. * @param a first matrix
  9. * @param b second matrix
  10. * @param transposeA if true: transpose matrix a before mmul
  11. * @param transposeB if true: transpose matrix b before mmul
  12. * @return result
  13. */
  14. public static INDArray gemm(INDArray a,
  15. INDArray b,
  16. boolean transposeA,
  17. boolean transposeB) {
  18. long cRows = (transposeA ? a.columns() : a.rows());
  19. long cCols = (transposeB ? b.rows() : b.columns());
  20. INDArray c = Nd4j.createUninitialized(new long[] {cRows, cCols}, 'f');
  21. return gemm(a, b, c, transposeA, transposeB, 1.0, 0.0);
  22. }

代码示例来源:origin: deeplearning4j/nd4j

  1. cCopy2.assign(c);
  2. INDArray out = Nd4j.gemm(a, b, c, transposeA, transposeB, alpha, beta);
  3. if (out != c) {
  4. System.out.println("Returned different array than c");
  5. INDArray aCopy = Shape.toOffsetZeroCopy(a);
  6. INDArray bCopy = Shape.toOffsetZeroCopy(b);
  7. INDArray onCopies = Nd4j.gemm(aCopy, bCopy, cCopy1, transposeA, transposeB, alpha, beta);
  8. printGemmFailureDetails(a, b, cCopy2, transposeA, transposeB, alpha, beta, rmExpected, out, onCopies);

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. /** Returns tuple: {Gradient,Delta,Output} given preOut */
  2. private Pair<Gradient, INDArray> getGradientsAndDelta(INDArray preOut) {
  3. ILossFunction lossFunction = layerConf().getLossFn();
  4. INDArray labels2d = getLabels2d();
  5. //INDArray delta = lossFunction.computeGradient(labels2d, preOut, layerConf().getActivationFunction(), maskArray);
  6. INDArray delta = lossFunction.computeGradient(labels2d, preOut, layerConf().getActivationFn(), maskArray);
  7. Gradient gradient = new DefaultGradient();
  8. INDArray weightGradView = gradientViews.get(DefaultParamInitializer.WEIGHT_KEY);
  9. INDArray biasGradView = gradientViews.get(DefaultParamInitializer.BIAS_KEY);
  10. Nd4j.gemm(input, delta, weightGradView, true, false, 1.0, 0.0); //Equivalent to: weightGradView.assign(input.transpose().mmul(delta));
  11. delta.sum(biasGradView, 0); //biasGradView is initialized/zeroed first in sum op
  12. gradient.gradientForVariable().put(DefaultParamInitializer.WEIGHT_KEY, weightGradView);
  13. gradient.gradientForVariable().put(DefaultParamInitializer.BIAS_KEY, biasGradView);
  14. return new Pair<>(gradient, delta);
  15. }

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. @Override
  2. public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon) {
  3. //If this layer is layer L, then epsilon is (w^(L+1)*(d^(L+1))^T) (or equivalent)
  4. INDArray z = preOutput(input, true);
  5. INDArray activationDerivative = propUpDerivative(z);
  6. INDArray delta = epsilon.muli(activationDerivative);
  7. if (maskArray != null) {
  8. delta.muliColumnVector(maskArray);
  9. }
  10. Gradient ret = new DefaultGradient();
  11. INDArray weightGrad = gradientViews.get(DefaultParamInitializer.WEIGHT_KEY); //f order
  12. Nd4j.gemm(input, delta, weightGrad, true, false, 1.0, 0.0);
  13. INDArray biasGrad = gradientViews.get(DefaultParamInitializer.BIAS_KEY);
  14. delta.sum(biasGrad, 0); //biasGrad is initialized/zeroed first in sum op
  15. INDArray vBiasGradient = gradientViews.get(PretrainParamInitializer.VISIBLE_BIAS_KEY);
  16. ret.gradientForVariable().put(DefaultParamInitializer.WEIGHT_KEY, weightGrad);
  17. ret.gradientForVariable().put(DefaultParamInitializer.BIAS_KEY, biasGrad);
  18. ret.gradientForVariable().put(PretrainParamInitializer.VISIBLE_BIAS_KEY, vBiasGradient);
  19. INDArray epsilonNext = params.get(DefaultParamInitializer.WEIGHT_KEY).mmul(delta.transpose()).transpose();
  20. return new Pair<>(ret, epsilonNext);
  21. }

代码示例来源:origin: org.nd4j/nd4j-api

  1. /**
  2. *
  3. * matrix multiply: implements op(a)*op(b)
  4. *
  5. * where op(x) means transpose x (or not) depending on
  6. * setting of arguments transposea and transposeb.<br>
  7. * so gemm(a,b,false,false) == a.mmul(b), gemm(a,b,true,false) == a.transpose().mmul(b) etc.
  8. * @param a first matrix
  9. * @param b second matrix
  10. * @param transposeA if true: transpose matrix a before mmul
  11. * @param transposeB if true: transpose matrix b before mmul
  12. * @return result
  13. */
  14. public static INDArray gemm(INDArray a, INDArray b, boolean transposeA, boolean transposeB) {
  15. int cRows = (transposeA ? a.columns() : a.rows());
  16. int cCols = (transposeB ? b.rows() : b.columns());
  17. INDArray c = Nd4j.createUninitialized(new int[] {cRows, cCols}, 'f');
  18. return gemm(a, b, c, transposeA, transposeB, 1.0, 0.0);
  19. }

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. @Override
  2. public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon) {
  3. //If this layer is layer L, then epsilon is (w^(L+1)*(d^(L+1))^T) (or equivalent)
  4. INDArray z = preOutput(true); //Note: using preOutput(INDArray) can't be used as this does a setInput(input) and resets the 'appliedDropout' flag
  5. //INDArray activationDerivative = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf().getLayer().getActivationFunction(), z).derivative());
  6. // INDArray activationDerivative = conf().getLayer().getActivationFn().getGradient(z);
  7. // INDArray delta = epsilon.muli(activationDerivative);
  8. INDArray delta = layerConf().getActivationFn().backprop(z, epsilon).getFirst(); //TODO handle activation function params
  9. if (maskArray != null) {
  10. applyMask(delta);
  11. }
  12. Gradient ret = new DefaultGradient();
  13. INDArray weightGrad = gradientViews.get(DefaultParamInitializer.WEIGHT_KEY); //f order
  14. Nd4j.gemm(input, delta, weightGrad, true, false, 1.0, 0.0);
  15. INDArray biasGrad = gradientViews.get(DefaultParamInitializer.BIAS_KEY);
  16. delta.sum(biasGrad, 0); //biasGrad is initialized/zeroed first
  17. ret.gradientForVariable().put(DefaultParamInitializer.WEIGHT_KEY, weightGrad);
  18. ret.gradientForVariable().put(DefaultParamInitializer.BIAS_KEY, biasGrad);
  19. INDArray epsilonNext = params.get(DefaultParamInitializer.WEIGHT_KEY).mmul(delta.transpose()).transpose();
  20. return new Pair<>(ret, epsilonNext);
  21. }

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. Nd4j.gemm(lastEncoderActivation, currentDelta, dLdMeanW, true, false, 1.0, 0.0);
  2. INDArray dLdMeanB = gradientViews.get(VariationalAutoencoderParamInitializer.PZX_MEAN_B);
  3. currentDelta.sum(dLdMeanB, 0); //dLdMeanB is initialized/zeroed first in sum op
  4. actInput = fwd.encoderActivations[i - 1];
  5. Nd4j.gemm(actInput, currentDelta, dLdW, true, false, 1.0, 0.0);
  6. currentDelta.sum(dLdB, 0); //dLdB is initialized/zeroed first in sum op

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. INDArray dLdxzb = gradientViews.get(VariationalAutoencoderParamInitializer.PXZ_B);
  2. INDArray lastDecActivations = decoderActivations[decoderActivations.length - 1];
  3. Nd4j.gemm(lastDecActivations, dpdpxz, dLdxzw, true, false, scaleFactor, gemmCConstant);
  4. if (l == 0) {
  5. dpdpxz.sum(dLdxzb, 0); //dLdxzb array is initialized/zeroed first in sum op
  6. Nd4j.gemm(actInput, currentDelta, dLdW, true, false, scaleFactor, gemmCConstant);
  7. INDArray dLdZXMeanW = gradientViews.get(VariationalAutoencoderParamInitializer.PZX_MEAN_W);
  8. INDArray dLdZXLogStdev2W = gradientViews.get(VariationalAutoencoderParamInitializer.PZX_LOGSTD2_W);
  9. Nd4j.gemm(lastEncoderActivation, dLdPreMu, dLdZXMeanW, true, false, scaleFactor, gemmCConstant);
  10. Nd4j.gemm(lastEncoderActivation, dLdPreLogSigma2, dLdZXLogStdev2W, true, false, scaleFactor, gemmCConstant);
  11. epsilon = Nd4j.gemm(dLdPreMu, eZXMeanW, false, true); //Equivalent to: epsilon = eZXMeanW.mmul(dLdPreMu.transpose()).transpose(); using (AxB^T)^T = BxA^T
  12. Nd4j.gemm(dLdPreLogSigma2, eZXLogStdev2W, epsilon, false, true, 1.0, 1.0);
  13. actInput = fwd.encoderActivations[i - 1];
  14. Nd4j.gemm(actInput, currentDelta, dLdW, true, false, scaleFactor, gemmCConstant);
  15. if (l == 0) {
  16. currentDelta.sum(dLdB, 0);

代码示例来源:origin: org.nd4j/nd4j-api

  1. cCopy2.assign(c);
  2. INDArray out = Nd4j.gemm(a, b, c, transposeA, transposeB, alpha, beta);
  3. if (out != c) {
  4. System.out.println("Returned different array than c");
  5. INDArray aCopy = Shape.toOffsetZeroCopy(a);
  6. INDArray bCopy = Shape.toOffsetZeroCopy(b);
  7. INDArray onCopies = Nd4j.gemm(aCopy, bCopy, cCopy1, transposeA, transposeB, alpha, beta);
  8. printGemmFailureDetails(a, b, cCopy2, transposeA, transposeB, alpha, beta, rmExpected, out, onCopies);

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. Nd4j.gemm(input, delta, weightGradView, true, false, 1.0, 0.0); //Equivalent to: weightGradView.assign(input.transpose().mmul(delta));
  2. delta.sum(biasGradView, 0); //biasGradView is initialized/zeroed first in sum op

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. if (iTimeIndex != timeSeriesLength - 1) {
  2. Nd4j.gemm(deltaifogNext, wIFOG, nablaOut, false, true, 1.0, 1.0);
  3. Nd4j.gemm(prevLayerActivationSlice, deltaifogNext, iwGradientsOut, true, false, 1.0, 1.0);
  4. } else {
  5. INDArray iwGradients_i =
  6. iwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.interval(0, hiddenLayerSize));
  7. Nd4j.gemm(prevLayerActivationSlice, deltai, iwGradients_i, true, false, 1.0, 1.0);
  8. INDArray iwGradients_og = iwGradientsOut.get(NDArrayIndex.all(),
  9. NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
  10. INDArray deltaog = deltaifogNext.get(NDArrayIndex.all(),
  11. NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
  12. Nd4j.gemm(prevLayerActivationSlice, deltaog, iwGradients_og, true, false, 1.0, 1.0);
  13. Nd4j.gemm(prevHiddenUnitActivation, deltaifogNext, rwGradientsIFOG, true, false, 1.0, 1.0);
  14. if (iTimeIndex > 0 || prevHiddenUnitActivation != null) {
  15. Nd4j.gemm(deltaifogNext, inputWeights, epsilonNextSlice, false, true, 1.0, 1.0);
  16. } else {
  17. Nd4j.gemm(deltai, wi, epsilonNextSlice, false, true, 1.0, 1.0);
  18. INDArray deltaog = deltaifogNext.get(NDArrayIndex.all(),
  19. NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
  20. INDArray wog = inputWeights.get(NDArrayIndex.all(),
  21. NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
  22. Nd4j.gemm(deltaog, wog, epsilonNextSlice, false, true, 1.0, 1.0); //epsilonNextSlice.addi(deltao.mmul(woTranspose)).addi(deltag.mmul(wgTranspose));

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. Nd4j.gemm(im2col2d, delta2d, weightGradView2df, true, true, 1.0, 0.0);

代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn

  1. .notifyScopeLeft();
  2. Nd4j.gemm(prevOutputActivations, recurrentWeightsIFOG, ifogActivations, false, false, 1.0, 1.0);
  3. ifogActivations.addiRowVector(biases);

相关文章