Torch7系列教程之Torch深度学习库教程(一)

写在前面的话

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存储的张量。 张量的每个维度的大小由
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值