卷积是如何计算的
按照一般的思维都是按照kernel一个一个计算的,但是工业用一般是用minibatch 矩阵乘法, 为了加速,会专门写针对cpu的底层计算native方法。具体看三种计算代码,没有加入bias。
import org.nd4j.linalg.api.buffer.DataType;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.api.ops.OpContext;
import org.nd4j.linalg.api.ops.impl.layers.convolution.Conv2D;
import org.nd4j.linalg.api.shape.Shape;
import org.nd4j.linalg.convolution.Convolution;
import org.nd4j.linalg.factory.Nd4j;
/**
*
*/
public class ClassTest
{
public static void main( String[] args )
{
//manu( );
nativeOP( );
}
private static void testArrray( )
{
INDArray col = Nd4j.createUninitialized( DataType.FLOAT, new long[]{
1, 4, 4, 1, 3, 3
}, 'c' );
INDArray col2 = col.permute( 0, 3, 4, 5, 1, 2 );
INDArray input = Nd4j.create( new float[][][][]{
new float[][][]{
new float[][]{
new float[]{
1, 2, 3, 4, 5, 6
}, new float[]{
2, 2, 3, 4, 5, 6
}, new float[]{
3, 2, 3, 4, 5, 6
}, new float[]{
4, 2, 3, 4, 5, 6
}, new float[]{