本文主要讲解ndimension()、nelement()、size() / shape、view() / reshape等与张量相关的方法
深度学习中,张量使用相当频繁,本篇文章主要讲解一些与张量有关的方法。萌新博主,还请各位大佬指导o(* ̄▽ ̄*)ブ
读者如果要尝试本篇中的代码,请自行下载pytorch框架,并且引入torch和numpy包。
先生成示例张量 t (本文后续操作会在 t 张量之上进行)
# 张量相关方法demo
import torch
import numpy as np
# 创建一个3 x 4 x 5 的张量
t = torch.rand(3,4,5)
t 张量(随机生成,读者实验时可能与本文中的不一样):
1.获取张量维度的数目 -- ndimension()
这里的3表示,这个 t 张量总共有3个维度,可以理解成x、y、z轴这种
比如此时,如果再生成一个2 x 3 的张量,则该张量维度的数目为 2
2.获取张量中总元素的个数 -- nelement()
3.获取张量的形状,和numpy数组中的shape差不多,所以,这里依然可以用shape进行形状的查看 -- size() / shape
使用size和shape的区别在于:
shape是访问的属性,size是调用的方法,所以,shape不用在后面加括号,而size需要加括号
同时我们也可以使用下标,对各个维度的大小进行访问(维度是从下标为0开始的)
,
4.重塑张量的形状 -- view() / reshape
对于使用过numpy数组的同学,一定熟悉reshape操作,我们可以通过reshape重塑numpy数组的形状
reshape(推荐使用)
当然,在pytorch框架中,我们依然可以使用,对于刚刚的张量 t ,它的形状是 3 x 4 x 5,总计有60个元素,如果我们想要它变成一个二维的张量,我们可以采用reshape方法
改变reshape后的张量,会改变原来的张量
同时,reshape会在形状信息不兼容时自动生成一个新的张量(兼容:新张量的2个连续维度的乘积等于原来张量的某一维度)
view
view不改变张量底层的数据,只改变维度步长的信息,如果要生成一个欣的张量,则还需调用contiguous()方法
我们可以理解为 reshape(x,y) = view(x,y).contiguous()