深度学习之deeplearning4j(三)

神经网络最终的编程实现可能就是都是关于矩阵的操作,不仅仅局限于加减乘除。里面是基于ND4j实现的矩阵操作,这里我仅仅写了一些代码,还有其它很多的功能,感兴趣的可以自己找资料。

package org.deeplearning4j.examples.convolution;

import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;



public class test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        INDArray v1 = Nd4j.create(new  double[]{1,2,3});//创建一个矩阵
        INDArray v2 = Nd4j.create(new double[]{4,5,6});
        System.out.println(v1.distance2(v2));//计算欧式距离
        System.out.println(v1.add(v2));//向量每一个元素相加
        System.out.println(v1.add(1));//向量中每一个元素+1
        System.out.println(v1.cumsum(0));//这个和matlab中的函数有些相似的地方,在Gibbs这种采样定律中经常使用
        //比如[1,2,3]=>[1,1+2,1+2+3]
        INDArray m = Nd4j.create(new double[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}); //创建矩阵
        System.out.println(m);
        System.out.println(m.transpose());//矩阵的转至
        System.out.println(m.mul(2));//矩阵乘以一个数字
        System.out.println(m.mul(m));//矩阵乘以矩阵(对应元素相乘)
        System.out.println(m.mulColumnVector( Nd4j.create(new  double[]{1,2,3,4}) ));//看结果吧,不知道如何描述
        System.out.println(m.muliRowVector( Nd4j.create(new  double[]{1,2,3,4})));
        System.out.println(m.muliRowVector( Nd4j.create(new  double[]{1,2,3,4})));
    }
}

这里有个小问题,如果要是表示多维数组该如何表示哪?这个表示比较麻烦,但是也很重要。比如deeplerning4j对卷积层的操作就是采用这种方式:批处理样本数-通道数-宽度-长度四个维度的结构。具体如何实现的不打算现在研究,因为确实比较麻烦,我就是跟着debug一步一步走过来的,说句实话很不好用。。下面看看代码就知道意思了。

package John.John;

import java.util.ArrayList;
import java.util.List;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;

public class test01 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        INDArray m = Nd4j.create(new double[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}});       //创建矩阵
        List<INDArray> list = new ArrayList<INDArray>();
        list.add(m);
        System.out.println(m);
        INDArray m3 = Nd4j.create(list,  new int[] {1,1});//创建3维矩阵
        System.out.println(m3);
        List<INDArray> list2 = new ArrayList<INDArray>();
        list2.add(m3);
        INDArray m4 = Nd4j.create(list2,  new int[] {1,1});//创建4维矩阵
        System.out.println(m4);
    }
}
这里面还有卷积的操作,但是我计算几次结果都是错的,也许是使用的方法不正确,但是这个真心难用。。

你可能感兴趣的:(神经网络,深度学习)