torch中的tensor

tensor,即“张量”。实际上跟numpy数组、向量、矩阵的格式基本一样。但是是专门针对GPU来设计的,可以运行在GPU上来加快计算效率。

定义一个tensor

Torch中定义tensor,与numpy中定义矩阵差不多,例如定义一个5×3的tensor,每一项都是0的张量:

x = torch.zeros(5,3)

另外初始化tensor还有如下形式:

  • torch.empty(size) 返回形状为size的空tensor
  • torch.zeros_like(input) 返回跟input的tensor一个size的全零tensor
  • torch.ones(size) 全部是1的tensor
  • torch.ones_like(input) 返回跟input的tensor一个size的全1tensor
  • torch.arange(start=0, end, step=1) 用法与range一样
  • torch.linspace(start,end,steps,) 创建均分的1维张量,数值区间[start,end],样本量为steps
  • torch.logspace(start,end,steps)创建对数均分的1维张量,和linspace参数一样

还有根据numpy数组初始化:

  • torch.from_numpy(input) numpy中的数据与tensor中的数据使用的同一个内存,一个数据改变另一个也会改变

还有随机初始化:

  • torch.rand(size) [0,1)内的均匀分布随机数
  • torch.rand_like(input) 返回跟input的tensor一样size的0-1随机数
  • torch.randn(size) 返回标准正太分布N(0,1)的随机数
  • torch.normal(mean, std, out=None) 正态分布。mean和std都是tensor,决定返回的形状。mean默认为均值0,std默认标准差为1

tensor的属性有

.data:数据(但建议使用.detach()
.dtype:张量的数据类型 如:torch.FloatTensor
.shape:张量的形状
.device:张量所在的设备
.requires_grad:是否需要求导
.grad:data的梯度
.grad_fn:创建Tensor的function
.is_leaf:是否为叶子结点

tensor的操作

  • torch.cat(seq, dim=0, out=None) 把一堆tensor丢进去,按照dim指定的维度拼接、堆叠在一起.
    例:
a = torch.rand(2,3)
print(a)
b = torch.cat((a,a),dim=0)
print(b)
c = torch.cat((a,a),dim=1)
print(c)

Output:
tensor([[0.6646, 0.8589, 0.5251],
        [0.2515, 0.4547, 0.6944]])
tensor([[0.6646, 0.8589, 0.5251],
        [0.2515, 0.4547, 0.6944],
        [0.6646, 0.8589, 0.5251],
        [0.2515, 0.4547, 0.6944]])
tensor([[0.6646, 0.8589, 0.5251, 0.6646, 0.8589, 0.5251],
        [0.2515, 0.4547, 0.6944, 0.2515, 0.4547, 0.6944]])
  • torch.chunk(tensor, chunks, dim=0) 把tensor切成块,数量由chunks指定,方向由dim决定。
    例:
a = torch.rand(2, 3)
print(a)
b = torch.chunk(a, 2, 0)
print(b)
c = torch.chunk(a, 3, 1)
print(c)

Output:
tensor([[0.6142, 0.8066, 0.9073],
        [0.7619, 0.1243, 0.3439]])
(tensor([[0.6142, 0.8066, 0.9073]]), tensor([[0.7619, 0.1243, 0.3439]]))
(tensor([[0.6142],
        [0.7619]]), tensor([[0.8066],
        [0.1243]]), tensor([[0.9073],
        [0.3439]]))

torch与numpy数组互换:

  • tensor.numpy()torch.from_numpy(array)

torch的运算

  • 加法: a+b或者torch.add(a,b) 若想进行in-place操作(原地计算),只需在add后面加一个。另外,torch里面所有带""的操作,都是指的in-place的操作,torch加减乘除都能带_。
a = torch.rand(3)
b = torch.rand(3)
print(a)
print(b)
c = torch.add(a,b)
b.add_(a)
print(b,c)

Output
tensor([0.5786, 0.5824, 0.7091])
tensor([0.6576, 0.8690, 0.0564])
tensor([1.2362, 1.4514, 0.7655]) tensor([1.2362, 1.4514, 0.7655])
  • 乘法:torch.mul(input, other, out=None)input乘以other
  • 除法:torch.div(input, other, out=None)input除以other
  • 指数:torch.pow(input, exponent, out=None)
  • 开根号:torch.sqrt(input, out=None)
  • 四舍五入到整数:torch.round(input, out=None)
  • argmax函数:torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号,
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容