Каково точное определение INDArray.broadcast(long...)
в ND4j?
Описание обоих методов гласит только «Передает этот ndarray, чтобы быть указанной формой», и не объясняет требования для приемлемых форм, которые должны быть широковещание.
Следующий код (предназначенный для трансляции ndarray в форме дополнительного первого измерения длины 3) не работает:
INDArray array = Nd4j.create(new double[] {1.,2.,3.,4.}, new int[] {2,2}, 'c');
System.out.println("array: " + array);
System.out.println("array.broadcast(3,2,2): " + array.broadcast(3,2,2));
Я ранее пытался транслировать массив форма (4)
до (3,4)
, и это сработало. Я попытался (2,2)
до (2,2,3)
и получил ошибку о несовместимых формах. В (2,2)
до (3,2,2)
выше я не получаю сообщение о несовместимых формах, поэтому я предполагаю, что они совместимы, и это должно работать, но я получаю следующую ошибку:
Error at [D:/jenkins/ws/dl4j-deeplearning4j-1.0.0-beta4-windows-x86_64-cpu/libnd4j/include/ops/declarable/generic/transforms/tile.cpp:83:0]:
TILE op: this op requires repeats vector, either as IArgs or second array with length equal to rank of input array to be tiled !
Exception in thread "main" java.lang.RuntimeException: Op [tile] execution failed
at org.nd4j.linalg.cpu.nativecpu.ops.NativeOpExecutioner.exec(NativeOpExecutioner.java:1645)
at org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner.execAndReturn(DefaultOpExecutioner.java:714)
at org.nd4j.linalg.api.ndarray.BaseNDArray.broadcast(BaseNDArray.java:5451)
at org.nd4j.linalg.api.ndarray.BaseNDArray.broadcast(BaseNDArray.java:5465)
at com.sri.ai.praise.core.representation.interfacebased.factor.core.table.NDArraySandbox.main(NDArraySandbox.java:21)
Caused by: java.lang.RuntimeException: Op validation failed
at org.nd4j.nativeblas.Nd4jCpu$NativeOps.execCustomOp(Native Method)
at org.nd4j.linalg.cpu.nativecpu.ops.NativeOpExecutioner.exec(NativeOpExecutioner.java:2045)
at org.nd4j.linalg.cpu.nativecpu.ops.NativeOpExecutioner.exec(NativeOpExecutioner.java:1637)
... 4 more