本文整理了Java中org.nd4j.linalg.factory.Nd4j.gemm()
方法的一些代码示例,展示了Nd4j.gemm()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Nd4j.gemm()
方法的具体详情如下:
包路径:org.nd4j.linalg.factory.Nd4j
类名称: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=alphaop(a)op(b)+betac,其中op(X)表示转置X(或不转置),具体取决于参数transpose和transposeB的设置。
注意,矩阵c必须是fortran顺序,偏移量为零,并且具有c.data()。长度==c.长度()。否则将引发异常。
除非你了解3级blas和NDArray存储订单,否则不要使用此功能。
代码示例来源:origin: guoguibing/librec
@Override
public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon) {
//If this layer is layer L, then epsilon is (w^(L+1)*(d^(L+1))^T) (or equivalent)
INDArray z = this.preOutput(true); //Note: using preOutput(INDArray) can't be used as this does a setInput(input) and resets the 'appliedDropout' flag
//INDArray activationDerivative = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf().getLayer().getActivationFunction(), z).derivative());
// INDArray activationDerivative = conf().getLayer().getActivationFn().getGradient(z);
// INDArray delta = epsilon.muli(activationDerivative);
INDArray delta = layerConf().getActivationFn().backprop(z, epsilon).getFirst(); //TODO handle activation function params
if (maskArray != null) {
applyMask(delta);
}
Gradient ret = new DefaultGradient();
INDArray weightGrad = gradientViews.get(CDAEParamInitializer.WEIGHT_KEY); //f order
Nd4j.gemm(input, delta, weightGrad, true, false, 1.0, 0.0);
INDArray userWeightGrad = gradientViews.get(CDAEParamInitializer.USER_WEIGHT_KEY); //f order
userWeightGrad.assign(delta);
INDArray biasGrad = gradientViews.get(CDAEParamInitializer.BIAS_KEY);
biasGrad.assign(delta.sum(0)); //biasGrad is initialized/zeroed first
ret.gradientForVariable().put(CDAEParamInitializer.WEIGHT_KEY, weightGrad);
ret.gradientForVariable().put(CDAEParamInitializer.BIAS_KEY, biasGrad);
ret.gradientForVariable().put(CDAEParamInitializer.USER_WEIGHT_KEY, userWeightGrad);
INDArray epsilonNext = params.get(CDAEParamInitializer.WEIGHT_KEY).mmul(delta.transpose()).transpose();
//epsilonNext = null;
return new Pair<>(ret, epsilonNext);
}
代码示例来源:origin: deeplearning4j/nd4j
/**
*
* matrix multiply: implements op(a)*op(b)
*
* where op(x) means transpose x (or not) depending on
* setting of arguments transposea and transposeb.<br>
* so gemm(a,b,false,false) == a.mmul(b), gemm(a,b,true,false) == a.transpose().mmul(b) etc.
* @param a first matrix
* @param b second matrix
* @param transposeA if true: transpose matrix a before mmul
* @param transposeB if true: transpose matrix b before mmul
* @return result
*/
public static INDArray gemm(INDArray a,
INDArray b,
boolean transposeA,
boolean transposeB) {
long cRows = (transposeA ? a.columns() : a.rows());
long cCols = (transposeB ? b.rows() : b.columns());
INDArray c = Nd4j.createUninitialized(new long[] {cRows, cCols}, 'f');
return gemm(a, b, c, transposeA, transposeB, 1.0, 0.0);
}
代码示例来源:origin: deeplearning4j/nd4j
cCopy2.assign(c);
INDArray out = Nd4j.gemm(a, b, c, transposeA, transposeB, alpha, beta);
if (out != c) {
System.out.println("Returned different array than c");
INDArray aCopy = Shape.toOffsetZeroCopy(a);
INDArray bCopy = Shape.toOffsetZeroCopy(b);
INDArray onCopies = Nd4j.gemm(aCopy, bCopy, cCopy1, transposeA, transposeB, alpha, beta);
printGemmFailureDetails(a, b, cCopy2, transposeA, transposeB, alpha, beta, rmExpected, out, onCopies);
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
/** Returns tuple: {Gradient,Delta,Output} given preOut */
private Pair<Gradient, INDArray> getGradientsAndDelta(INDArray preOut) {
ILossFunction lossFunction = layerConf().getLossFn();
INDArray labels2d = getLabels2d();
//INDArray delta = lossFunction.computeGradient(labels2d, preOut, layerConf().getActivationFunction(), maskArray);
INDArray delta = lossFunction.computeGradient(labels2d, preOut, layerConf().getActivationFn(), maskArray);
Gradient gradient = new DefaultGradient();
INDArray weightGradView = gradientViews.get(DefaultParamInitializer.WEIGHT_KEY);
INDArray biasGradView = gradientViews.get(DefaultParamInitializer.BIAS_KEY);
Nd4j.gemm(input, delta, weightGradView, true, false, 1.0, 0.0); //Equivalent to: weightGradView.assign(input.transpose().mmul(delta));
delta.sum(biasGradView, 0); //biasGradView is initialized/zeroed first in sum op
gradient.gradientForVariable().put(DefaultParamInitializer.WEIGHT_KEY, weightGradView);
gradient.gradientForVariable().put(DefaultParamInitializer.BIAS_KEY, biasGradView);
return new Pair<>(gradient, delta);
}
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
@Override
public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon) {
//If this layer is layer L, then epsilon is (w^(L+1)*(d^(L+1))^T) (or equivalent)
INDArray z = preOutput(input, true);
INDArray activationDerivative = propUpDerivative(z);
INDArray delta = epsilon.muli(activationDerivative);
if (maskArray != null) {
delta.muliColumnVector(maskArray);
}
Gradient ret = new DefaultGradient();
INDArray weightGrad = gradientViews.get(DefaultParamInitializer.WEIGHT_KEY); //f order
Nd4j.gemm(input, delta, weightGrad, true, false, 1.0, 0.0);
INDArray biasGrad = gradientViews.get(DefaultParamInitializer.BIAS_KEY);
delta.sum(biasGrad, 0); //biasGrad is initialized/zeroed first in sum op
INDArray vBiasGradient = gradientViews.get(PretrainParamInitializer.VISIBLE_BIAS_KEY);
ret.gradientForVariable().put(DefaultParamInitializer.WEIGHT_KEY, weightGrad);
ret.gradientForVariable().put(DefaultParamInitializer.BIAS_KEY, biasGrad);
ret.gradientForVariable().put(PretrainParamInitializer.VISIBLE_BIAS_KEY, vBiasGradient);
INDArray epsilonNext = params.get(DefaultParamInitializer.WEIGHT_KEY).mmul(delta.transpose()).transpose();
return new Pair<>(ret, epsilonNext);
}
代码示例来源:origin: org.nd4j/nd4j-api
/**
*
* matrix multiply: implements op(a)*op(b)
*
* where op(x) means transpose x (or not) depending on
* setting of arguments transposea and transposeb.<br>
* so gemm(a,b,false,false) == a.mmul(b), gemm(a,b,true,false) == a.transpose().mmul(b) etc.
* @param a first matrix
* @param b second matrix
* @param transposeA if true: transpose matrix a before mmul
* @param transposeB if true: transpose matrix b before mmul
* @return result
*/
public static INDArray gemm(INDArray a, INDArray b, boolean transposeA, boolean transposeB) {
int cRows = (transposeA ? a.columns() : a.rows());
int cCols = (transposeB ? b.rows() : b.columns());
INDArray c = Nd4j.createUninitialized(new int[] {cRows, cCols}, 'f');
return gemm(a, b, c, transposeA, transposeB, 1.0, 0.0);
}
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
@Override
public Pair<Gradient, INDArray> backpropGradient(INDArray epsilon) {
//If this layer is layer L, then epsilon is (w^(L+1)*(d^(L+1))^T) (or equivalent)
INDArray z = preOutput(true); //Note: using preOutput(INDArray) can't be used as this does a setInput(input) and resets the 'appliedDropout' flag
//INDArray activationDerivative = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf().getLayer().getActivationFunction(), z).derivative());
// INDArray activationDerivative = conf().getLayer().getActivationFn().getGradient(z);
// INDArray delta = epsilon.muli(activationDerivative);
INDArray delta = layerConf().getActivationFn().backprop(z, epsilon).getFirst(); //TODO handle activation function params
if (maskArray != null) {
applyMask(delta);
}
Gradient ret = new DefaultGradient();
INDArray weightGrad = gradientViews.get(DefaultParamInitializer.WEIGHT_KEY); //f order
Nd4j.gemm(input, delta, weightGrad, true, false, 1.0, 0.0);
INDArray biasGrad = gradientViews.get(DefaultParamInitializer.BIAS_KEY);
delta.sum(biasGrad, 0); //biasGrad is initialized/zeroed first
ret.gradientForVariable().put(DefaultParamInitializer.WEIGHT_KEY, weightGrad);
ret.gradientForVariable().put(DefaultParamInitializer.BIAS_KEY, biasGrad);
INDArray epsilonNext = params.get(DefaultParamInitializer.WEIGHT_KEY).mmul(delta.transpose()).transpose();
return new Pair<>(ret, epsilonNext);
}
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
Nd4j.gemm(lastEncoderActivation, currentDelta, dLdMeanW, true, false, 1.0, 0.0);
INDArray dLdMeanB = gradientViews.get(VariationalAutoencoderParamInitializer.PZX_MEAN_B);
currentDelta.sum(dLdMeanB, 0); //dLdMeanB is initialized/zeroed first in sum op
actInput = fwd.encoderActivations[i - 1];
Nd4j.gemm(actInput, currentDelta, dLdW, true, false, 1.0, 0.0);
currentDelta.sum(dLdB, 0); //dLdB is initialized/zeroed first in sum op
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
INDArray dLdxzb = gradientViews.get(VariationalAutoencoderParamInitializer.PXZ_B);
INDArray lastDecActivations = decoderActivations[decoderActivations.length - 1];
Nd4j.gemm(lastDecActivations, dpdpxz, dLdxzw, true, false, scaleFactor, gemmCConstant);
if (l == 0) {
dpdpxz.sum(dLdxzb, 0); //dLdxzb array is initialized/zeroed first in sum op
Nd4j.gemm(actInput, currentDelta, dLdW, true, false, scaleFactor, gemmCConstant);
INDArray dLdZXMeanW = gradientViews.get(VariationalAutoencoderParamInitializer.PZX_MEAN_W);
INDArray dLdZXLogStdev2W = gradientViews.get(VariationalAutoencoderParamInitializer.PZX_LOGSTD2_W);
Nd4j.gemm(lastEncoderActivation, dLdPreMu, dLdZXMeanW, true, false, scaleFactor, gemmCConstant);
Nd4j.gemm(lastEncoderActivation, dLdPreLogSigma2, dLdZXLogStdev2W, true, false, scaleFactor, gemmCConstant);
epsilon = Nd4j.gemm(dLdPreMu, eZXMeanW, false, true); //Equivalent to: epsilon = eZXMeanW.mmul(dLdPreMu.transpose()).transpose(); using (AxB^T)^T = BxA^T
Nd4j.gemm(dLdPreLogSigma2, eZXLogStdev2W, epsilon, false, true, 1.0, 1.0);
actInput = fwd.encoderActivations[i - 1];
Nd4j.gemm(actInput, currentDelta, dLdW, true, false, scaleFactor, gemmCConstant);
if (l == 0) {
currentDelta.sum(dLdB, 0);
代码示例来源:origin: org.nd4j/nd4j-api
cCopy2.assign(c);
INDArray out = Nd4j.gemm(a, b, c, transposeA, transposeB, alpha, beta);
if (out != c) {
System.out.println("Returned different array than c");
INDArray aCopy = Shape.toOffsetZeroCopy(a);
INDArray bCopy = Shape.toOffsetZeroCopy(b);
INDArray onCopies = Nd4j.gemm(aCopy, bCopy, cCopy1, transposeA, transposeB, alpha, beta);
printGemmFailureDetails(a, b, cCopy2, transposeA, transposeB, alpha, beta, rmExpected, out, onCopies);
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
Nd4j.gemm(input, delta, weightGradView, true, false, 1.0, 0.0); //Equivalent to: weightGradView.assign(input.transpose().mmul(delta));
delta.sum(biasGradView, 0); //biasGradView is initialized/zeroed first in sum op
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
if (iTimeIndex != timeSeriesLength - 1) {
Nd4j.gemm(deltaifogNext, wIFOG, nablaOut, false, true, 1.0, 1.0);
Nd4j.gemm(prevLayerActivationSlice, deltaifogNext, iwGradientsOut, true, false, 1.0, 1.0);
} else {
INDArray iwGradients_i =
iwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.interval(0, hiddenLayerSize));
Nd4j.gemm(prevLayerActivationSlice, deltai, iwGradients_i, true, false, 1.0, 1.0);
INDArray iwGradients_og = iwGradientsOut.get(NDArrayIndex.all(),
NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
INDArray deltaog = deltaifogNext.get(NDArrayIndex.all(),
NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
Nd4j.gemm(prevLayerActivationSlice, deltaog, iwGradients_og, true, false, 1.0, 1.0);
Nd4j.gemm(prevHiddenUnitActivation, deltaifogNext, rwGradientsIFOG, true, false, 1.0, 1.0);
if (iTimeIndex > 0 || prevHiddenUnitActivation != null) {
Nd4j.gemm(deltaifogNext, inputWeights, epsilonNextSlice, false, true, 1.0, 1.0);
} else {
Nd4j.gemm(deltai, wi, epsilonNextSlice, false, true, 1.0, 1.0);
INDArray deltaog = deltaifogNext.get(NDArrayIndex.all(),
NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
INDArray wog = inputWeights.get(NDArrayIndex.all(),
NDArrayIndex.interval(2 * hiddenLayerSize, 4 * hiddenLayerSize));
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
Nd4j.gemm(im2col2d, delta2d, weightGradView2df, true, true, 1.0, 0.0);
代码示例来源:origin: org.deeplearning4j/deeplearning4j-nn
.notifyScopeLeft();
Nd4j.gemm(prevOutputActivations, recurrentWeightsIFOG, ifogActivations, false, false, 1.0, 1.0);
ifogActivations.addiRowVector(biases);
内容来源于网络,如有侵权,请联系作者删除!