在深度学习中,我们通常会频繁地对数据进行操作。可以说,数据处理是深度学习的基础。为了开始我们后续的工作,首先我们需要存储和处理数。如果您之前使用过Python的科学计算包NumPy,那么您将会接下来的内容非常熟悉。
在DJL的NDArray不仅支持CUP,还支持GPU以及分离式云端结构,并且支持自动微分等功能。
新手上路
新手上路,我们先用arange创建一个一个行向量x,包含从0开始连续的12个整数。
NDManager manager = NDManager.newBaseManager();
NDArray x = manager.arange(12);
System.out.println(x);
//输出值为:
ND: (12) cpu() int32
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
这里我们将使用 NDManager来创建向量x。因为Java Garbage Collector无法监管本地内存消耗,我们需要NDManager来帮助管理NDArray的内存消耗和回收。通常我们会把NDManager封装在try blocks中,这样所有的ndarray可以被及时关掉。如:
try(NDManager manager = NDManager.newBaseManager()){
NDArray x = manager.arange(12);
System.out.println(x);
}
向量维度
我们可以通过查看shape属性,获得 NDArray 的shape维度信息(每个轴的长度)。
//查看维度信息
System.out.println(x.getShape());
//输出
(12)
当然,我们也可以通过reshape功能手工调整,改变 NDArray 的维度并且不改变每个元素的数值。例如,我们可以这样转换我们的向量x,从维度(1, 12)的行向量转化成维度为(3, 4)的矩阵。这是一个新的ndarray,包含相同的数值但是是由3行和4列写成的。尽管shape维度改变了,但是向量x 的成员没有改变。
//变更维度
x = x.reshape(3, 4);
System.out.println(x);
//输出:
ND: (3, 4) cpu() int32
[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
]
简单总结
在刚开始动手学习深度学习时,是很痛苦的,因为之前Java开发者大脑里运算的是数字计算。在数字计算转换到向量计算时,不但计算量会增加,思维模式也发生了很大的变化。本章通过简单的代码带您上手。通过简单的工具,为您准备好基础数学及计算知识,尽量使您因不会数学概念而带来的学习烦恼。
本文中讲的简单代码,关注公众号里回复【002】获取。