美文网首页
DL4J中文文档/ND4J/语法

DL4J中文文档/ND4J/语法

作者: hello风一样的男子 | 来源:发表于2019-01-26 20:11 被阅读0次

有关完整的ND4J API索引,请参考javadoc

ND4J中使用了三种类型的操作:标量、转换和累加。我们将使用“op”这个词作为“operation”的同义词。你可以在这里的目录下看到这三种nd4j操作的列表。每个列表中的每个Java文件都是一个op。

大多数操作只需要枚举,或者一个可以自动完成的离散值列表。激活函数是例外,因为它们采用诸如“relu”或“tanh”之类的字符串。

标量、转换和累加都有自己的模式。转换是最简单的,因为接受单个参数并对其执行操作。绝对值是一种转换,它采用参数x如abs(IComplexNDArray ndarray)并生成X的绝对值的结果。同样,可能应用于sigmoid转换 sigmoid()以生成“x的sigmoid”。

标量操作只接受两个参数:输入和要应用于该输入的标量。例如,ScalarAdd() 有两个参数:input INDArray x和标量数字大小;即ScalarAdd(INDArray x, Number num)。同样的格式适用于每个标量运算。

最后,我们有积加,也被称为GPU处 缩减。累加将数组和向量互相添加,并可以通过按行操作添加元素来减少结果中这些数组的维数。例如,我们可以在数组上运行累加。

[1 2
3 4]

image.gif

它会给我们向量

[3
7]

image.gif

将列(即维度)从两个减少到一个。

累加可以是成对的,也可以是标量的。在成对缩减中,我们可能要处理两个形状相同的数组x和y。在这种情况下,我们可以用x和y的元素2乘2来计算它们的余弦相似度。

    cosineSim(x[i], y[i])

image.gif

或采用 EuclideanDistance(arr, arr2), 一个数组arr和另一个数组arr2之间的缩减。

许多nd4j操作被重载,这意味着共享一个公共名称的方法具有不同的参数列表。下面我们将只解释最简单的配置。

如你所见,ND4J操作有三种可能的参数类型:输入、可选参数和输出。输出在ops的构造函数中指定。输入在方法名称后面的括号中指定,始终在第一个位置,并且可选参数用于转换输入;例如要添加的标量;要乘以的系数,始终在第二个位置。

Method What it does
Transforms
ACos(INDArray x) 三角反余弦,元素方向。cos的倒数 ,如果 y = cos(x), 那么 x = ACos(y).
ASin(INDArray x) 也称为Arcsin。反正弦,元素方向。
ATan(INDArray x) 三角反切线,元素方向。tan的倒数,这样,如果y = tan(x) 那么 x = ATan(y).
Transforms.tanh(myArray) 双曲正切:一个sigmoidal函数。这适用于就地元素tanh运算。
Nd4j.getExecutioner().exec(Nd4j.getOpFactory() .createTransform(“tanh”, myArray)) equivalent to the above

对于其它转换, 查看此页

这里有两个执行z=tanh(x)的示例,其中原始数组x未修改。

INDArray x = Nd4j.rand(3,2);    //输入
INDArray z = Nd4j.create(3,2); //输出
Nd4j.getExecutioner().exec(new Tanh(x,z));
Nd4j.getExecutioner().exec(Nd4j.getOpFactory().createTransform("tanh",x,z));

image.gif

后两个例子使用了nd4j对所有操作的基本约定,其中我们有3个NDArrays,x、y和z。

x 是输入,必要的 
y 是可选输入,只在一些操作中使用(余弦相似度,加法操作等) 
z 是输出

image.gif

通常,z=x(如果只使用一个参数的构造函数,则这是默认值)。但也有例外情况,如x=x+y。另一种可能性是z=x+y等。

累加

大多数累加可以直接通过INDArray接口访问。
例如,要累加一个INDArray的所有元素:

double sum = myArray.sumNumber().doubleValue();

image.gif

沿维累加即每行的总和值:

INDArray tenBy3 = Nd4j.ones(10,3);  //10 行, 3列
INDArray sumRows = tenBy3.sum(0);
System.out.println(sumRows);    //输出: [ 10.00, 10.00, 10.00]

image.gif

沿维数的累加可推广,因此可以沿任何具有两个或多个维数的数组的两个维数求和。

数组上的子集操作

一个简单的例子:

INDArray random = Nd4j.rand(3, 3);
System.out.println(random);
[[0.93,0.32,0.18]
[0.20,0.57,0.60]
[0.96,0.65,0.75]]

INDArray lastTwoRows = random.get(NDArrayIndex.interval(1,3),NDArrayIndex.all());

image.gif

间隔是从fromInclusive到toExclusive,注意到可以等同于使用inclusive版本:NDArrayIndex.interval(1,2,true);

System.out.println(lastTwoRows);
[[0.20,0.57,0.60]
[0.96,0.65,0.75]]

INDArray twoValues = random.get(NDArrayIndex.point(1),NDArrayIndex.interval(0, 2));
System.out.println(twoValues);
[ 0.20, 0.57]

image.gif

这些是底层数组的视图,而不是复制操作(它提供了更大的灵活性,并且没有复制成本)。

twoValues.addi(5.0);
System.out.println(twoValues);
[ 5.20, 5.57]

System.out.println(random);
[[0.93,0.32,0.18]
[5.20,5.57,0.60]
[0.96,0.65,0.75]]

image.gif

为了避免就地行为,可以使用random.get(…).dup()进行复制。

| Scalar |
|
| INDArray.add(number) |

返回将数字添加到INDArray x的每个条目的结果;例如,myarray.add(2.0)

|
| INDArray.addi(number) |

返回将数字添加到INDArray x的每个条目的结果

|
| ScalarAdd(INDArray x, Number num) |

返回将数字添加到INDArray x的每个条目的结果

|
| ScalarDivision(INDArray x, Number num) |

返回将INDArray x的每个条目除以num的结果。

|
| ScalarMax(INDArray x, Number num) |

INDArray x的每个条目与num进行比较,并返回更高的数量。

|
| ScalarMultiplication(INDArray x, Number num) |

返回将INDArray x的每个条目乘以num的结果。

|
| ScalarReverseDivision(INDArray x, Number num) |

返回将num除以INDArray x的每个元素的结果。

|
| ScalarReverseSubtraction(INDArray x, Number num) |

返回从num中减去INDArray x的每个条目的结果。

|
| ScalarSet(INDArray x, Number num) |

这会将INDArray x的每个条目的值设置为num。

|
| ScalarSubtraction(INDArray x, Number num) |

返回从INDArray x的每个条目中减去num的结果。

|

如果您不理解nd4j语法的解释,找不到方法的定义,或者希望请求添加函数,请在Gitter live chat上通知我们。

相关文章

  • DL4J中文文档/ND4J/语法

    有关完整的ND4J API索引,请参考javadoc。 ND4J中使用了三种类型的操作:标量、转换和累加。我们将使...

  • DL4J中文文档/ND4J/张量

    张量& ND4J 一个向量,即我们输入神经网络的数字列,一个更通用的数学结构的子类,称为张量。张量是多维数组。你已...

  • DL4J中文文档/ND4J/概述

    本用户指南旨在解释(并提供示例)ND4J中的主要功能。 简介NDArrays:它们在内存中是如何存储的?视图:当两...

  • DL4J中文文档/ND4J/矩阵操作

    在学习nd4j的过程中,还有其他一些基本的矩阵操作要突出显示。(示例代码) 转置 矩阵的转置是它的镜像。矩阵A第1...

  • DL4J中文文档/ND4J/元素操作

    元素操作比矢量操作更直观,因为一个矩阵的元素清楚地映射到另一个矩阵上,为了获得结果,你只需要执行一个算术操作。(示...

  • DL4J中文文档/ND4J/基本用法

    介绍 线性代数的基本运算是矩阵的生成、加法和乘法。本指南将向你展示如何使用ND4J以及各种高级转换执行这些操作。 ...

  • MarkDown语法

    一、Markdown 官方文档 Markdown 中文版语法说明

  • Numpy

    Numpy中文文档 # 基本语法 ``` import numpy myText = numpy.genfromt...

  • React Native 入门相关文档

    React Native 入门相关文档 官方文档 中文版官方文档 FlexBox讲解 ES5\ES6语法 官方文档...

  • DL4J中文文档/目录

    Arbiter(阿比特)概述层空间参数空间 DataVec概述记录降维概要系列化转换分析读取器条件执行器过滤器运算...

网友评论

      本文标题:DL4J中文文档/ND4J/语法

      本文链接:https://www.haomeiwen.com/subject/xsqwjqtx.html