Torch7深度学习库教程
写在前面的话
torch深度学习库中包含有很多实用性很强的数学计算库,包括有nn、nngraph、optim优化库、rnn神经网络库等等。我们首先从torch7中最基础的数据运算的torch库进行学习。
torch库
简介:Torch程序库中包含多维张量的数据结构,并定义了这些数据的数学运算。 此外,它提供了许多实用函数,可用于有效地序列化张量和任意类型,以及其他有用的实用函数。
Torch库中包含有以下的包
- Tensor库
- Tensor数据类型
- 数学运算库
- 存储接口库,为Tensor对象提供了基本的存储
- 文件File I/O接口库
- File文件操作库:常见文件处理库
- Disk File文件操作库:磁盘文件处理库
- Memory File文件操作库:RAM中存储操作
- Pipe File文件操作库 :管道文件操作
- 高级文件操作库:定义更高级的序列化功能
- 一些实用工具
- Timer库:关于时间操作库函数
- Tester库:通用测试器框架
- CmdLine库:命令行参数解析库
- Random库:随机数生成以及使用库
- 实用Torch类程序操作库函数
1 Tensor库
张量类(Tensor)是Torch中最重要的类, 几乎每个包都依赖于此类。 它是处理数字数据的类。 与Torch7中的几乎所有表一样,Tensor可序列化。Tensor在Torch中是一个十分重要的概念,类似于Python中numpy数组。
Torch中基本数据类型有以下几种:
| 浮点数类型 | 整数类型 |
|---|---|
| torch.DoubleTensor(64位浮点数) | torch.LongTensor(64位有符号整型) |
| torch.FloatTensor(32位浮点数,默认) | torch.IntTensor(32位有符号整型) |
| torch.HalfTensor(16位浮点数) | torch.ShortTensor(16位有符号整型) |
| - | torch.CharTensor(有符号8位整型) |
| - | torch.ByteTensor(无符号8位整型) |
1.1 Tensor数据使用简介
数据类型简介
Tensor是多位矩阵,维度的数量是无限的,最多可以使用LongStorage创建的维度来确定矩阵的大小,例如
-- creation of a 4D-tensor 4x5x6x2
z = torch.Tensor(4,5,6,2)
-- for more dimensions
s = torch.LongStorage(6)
s[1] = 4;s[2] = 3;s[3] = 7;s[4] = 6;s[5] = 2
x = torch.Tensor(s)
Tensor的维数可以通过nDimension()或dim()查询。第i个维度的大小由size(i)返回。 可以调用size()函数来返回包含所有尺寸大小的LongStorage。
x.nDimension()
x.dim()
Tensor的内部数据表示
Tensor的实际数据包含在Storage中,他可以通过storage()函数来进行访问。虽然Tensor的存储包含在一个独立的Storage中,但是它可能是在存储器中是不连续的:Storage中使用的第一个位置是由storageOffset()所给出来的(它从1开始)。第i个维度中从一个元素到另一个元素所需要的步长由stride(i)给出来。例如下面的操作可以说明这一点:
x = torch.Tensor(7,7,7) --create a Tensor
a = x[3][4][5] -- accessing the elemnet
-- also equivalently by the following step
a = x:storage()[x:storageOffset()+(3-1)*x:stride(1)+(4-1)*x:stride(2)+(5-1)*x:stride(3)]
可以说Tensor是查看Storage的一种特殊方式:Storage仅代表一块内存,而Tensor将这块内存解释为具有尺寸。
注意:大多数数字运算仅针对FloatTensor和DoubleTensor实现。
默认创建Tenor的矩阵可以由以下函数来确定:
torch.setdefaulttensortype(arg) --设置默认tensor类型
torch.getdefaulttensortype(arg) --获取默认tensor类型
-- 其中arg可以是”torch.FloatTensor“等等字符串
接下来介绍在Tenso库中r常用的一些操作函数
1.2 Tensor构造函数
用于创建新的Tensor对象,分配新的内存。 默认情况下,新分配的内存元素未初始化,因此可能包含任意数字。 以下是构建新Tensor的几种方法。
- torch.Tensor() :创建一个空的张量
- torch.Tensor(tensor) :返回一个新张量,该张量引用与给定张量相同的Storage。 size,stride和storage offset与给定张量相同。新的Tensor现在将“查看”与给定张量相同的存储。 得到的结果是,对张量元素的任何修改都会对给定张量的元素产生影响,并没有存储副本。
举个例子:
x = torch.Tensor(2,5):fill(3.14) --fill the tensor with 3.14
y = torch.Tensor(x)
y = y:zero() -- fill the tensor with zero
-- now x and y has the same value
- torch.Tensor(sz1[,sz2[,sz3[,sz4]]]]) :创建一个sz1 x sz2 x sz3 x sz4的张量。
- torch.Tensor(sizes, [strides]) :创建任意维度数字的张量。 LongStorage大小给出了张量每个维度的大小。 可选的LongStorage strides为每个维度中从一个元素到下一个元素的跳转提供了必要。 当然,大小和步幅必须具有相同数量的元素。 如果未给出,或者如果stride的某些元素为负,则将计算stride()函数,以使张量在内存中尽可能连续。
举个例子:
size = torch.LongStorage({4,5,6})
x = torch.Tensor(size) --create size of 4x5x6 tensor
- torch.Tensor(storage,[storage,sizes,[strides]]) :返回从位置storageOffset(> = 1)开始使用现有Storage存储的张量。 张量的每个维度的大小由

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



