首页 > 代码库 > torch学习笔记3--tensor介绍1,对tensor的基本认知
torch学习笔记3--tensor介绍1,对tensor的基本认知
tensor是torch的核心,理论上四大框架如果不考虑直接汇编,使用更底层的语言,那么运算的速度和结果都应该是一样的。
caffe有blob数据块减小数据读取时候造成的时间损失,而tensor也是一样。(本人只了解过caffe、torch,其它两款没碰过)
tensor像是numpy的升级版,对速度十分重视的深度学习(等价于神经网络模型)来说,对数据读取,运算速度都严格要求。
--- 创建思维的tensor 4x5x6x2 z = torch.Tensor(4,5,6,2) --- 更多的维数需求也可以通过下面的方式实现,下面是6维的例子: s = torch.LongStorage(6) s[1] = 4; s[2] = 5; s[3] = 6; s[4] = 2; s[5] = 7; s[6] = 3; x = torch.Tensor(s)
而nDimension()可以得到维数大小,size()可以得到每个维的数量大小。LongStorage数据则会显示数据的长度。
> x:nDimension() 6 > x:size() 4 5 6 2 7 3 [torch.LongStorage of size 6]
事实上Tensor数据是保存在Storage中,所以也能够通过storage()函数获取tensor数据中的值。但存储的方式和读取的方式不同。
对于三维的tensor数据来说
x:storage()[x:storageOffset() +(3-1)*x:stride(1)+(4-1)*x:stride(2)+(5-1)*x:stride(3)]
等价于
x[3][4][5]
tensor数据写入的方式也能写成:
x = torch.Tensor(4,5) s = x:storage() for i=1,s:size() do -- 填充storge s[i] = i end > x -- x被认为是2维矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [torch.DoubleTensor of dimension 4x5]
一行的数据元素是连续存储的。
x = torch.Tensor(4,5) i = 0 x:apply(function() i = i + 1 return i end) > x 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [torch.DoubleTensor of dimension 4x5] > x:stride() 5 1 -- 在最后维之中的元素是连续的 [torch.LongStorage of size 2]
tensor之中数据元素的类别有(分别能在c对应):
ByteTensor -- 无符号字符串 CharTensor -- 有符号字符串 ShortTensor -- short IntTensor -- ints LongTensor -- longs FloatTensor -- floats DoubleTensor -- doubles
多数操作都只支持浮点类型数据
由于tensor已经使用了优化过的函数,所以多用已有函数进行操作。
甚至如果你想要复制一个数,也尽量使用函数。
y = torch.Tensor(x:size()):copy(x)
或者
y = x:clone()
torch学习笔记3--tensor介绍1,对tensor的基本认知
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。