torch基础

 一、torch.Tensors  https://pytorch-cn.readthedocs.io/zh/latest/package_references/Tensor/

 输出格式设置:torch.set_printoptions(precision=3, sci_mode=False)  这里禁用科学计数法输出

1、tensor类型

 

torch.IntTensor() 接受三种参数

  • torch.IntTensor([[1,2,3],[4,5,6]]) #随机初始化
  • torch.IntTensor(np.arange(6).reshape(2,3))
  • torch.IntTensor(2,3).zero_()

①.zero_()尾巴的使用                            常见用法

 .add_(value) .abs_() .sin_() .cos_() .eq_(value) .floor() .      x.dim()-> int  len(x)==x.shape[0]

②类型转换

 x.byte()、x.long()、x.float()、x.char()

③设备转换            tensor和numpy转换(numpy只能运行在cpu上)

 y = x.cuda() x = y.cpu()    n = t.numpy() t = torch.from_numpy(n)

④设备数据

 device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

 model.to(device)  mytensor.to(device)

二、torch基础  https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch

torch.is_tensor(obj)->bool

torch.numel(input)->int #返回张量中元素个数

1、创建Tensor

  torch.eye(3)#返回3维单位方阵

  torch.from_numpy(np.ones(shape=(2,3)))

  torch.linspace(start(float), end(float), steps=100(int))

  torch.ones(*sizes) #torch.ones(2,3)

  torch.zeros(*sizes)

  torch.rand(*sizes) #返回(0,1)的小数

  torch.randn(*sizes) #均值为0,方差为1

  torch.randperm(n) #返回0到n-1的数列,但随机排列

  torch.arange(start(float), end(float), step=1(float))

2、索引,切片,连接,换位

  torch.cat( [x, x, x], 0) #沿第0维将这3个x张量拼接,torch.stack(sequence, dim=0)则会增加一个维度

  torch.chunk(x, int, dim=0) #沿第0维将x拆分为长为2的tensor list

  torch.split(tensor, 2, dim=0) #沿着第0维拆分,每个分片内2行记录

  torch.index_select(x, 0, torch.LongTensor([0, 2])) #沿着第0维挑选,第0 2行组成一个新的张量

  torch.nonzero(x)->LongTensor #输出非0值元素的坐标list

  torch.squeeze(x, 2) #默认去除所有shape=1的维度,如果第2维的shape==1则去掉第2维度,否则啥也不执行

  torch.transpose(input, dim0, dim1) #转置torch.transpose(x,0,1) torch.transpose(x,1,0)

  torch.unsqueeze(input, dim) #指定维插入一个shape=1

 

3、序列化 并行化

  torch.save(obj,path)        model = InceptionV3()

  model = torch.load(path)      _ = model.load_state_dict(torch.load(model_weight_path), strict=False)

 torch.get_num_threads() → int #6 cpu并行线程数

  torch.set_num_threads(int)

4、数学操作

 ①一元

  torch.abs(x)、 torch.acos(x)、torch.cos(x)、torch.pow(x, value)、torch.log(x)、torch.ceil(x)

  torch.exp(x) #torch.exp(torch.Tensor([0, math.log(2)])) == tensor([1., 2.])

  torch.round(x) #四舍五入到最近的整数       torch.neg(x) #返回-x        torch.reciprocal(x) #返回1.0/x

  torch.sigmoid(x)、 torch.sqrt(x)

 ②二元

  torch.add(x,value) #张量每个元素都加上标量value

    + - * /:  两个运算数维度相同,至少有一个对应的相等

    

  torch.add(x,value=1,y) #x y都是张量,当shape[0]不同时,但元素数量必须相同,返回shape以x为准。value为标量,x += value * y 。

  torch.addcdiv(x, value=1, y, z) #x += value* (y/z)

  torch.addcmul(x, value=1, y, z) #x += value* (y*z)

  torch.div(x, value/y) #当x y的shape[0]不匹配时,但元素数量必须相同

  torch.mul(x, value/y)

  torch.fmod(x, value) #value可整可浮,torch.fmod(torch.Tensor([1, -2, 3, 4]), 1.5) == torch.FloatTensor([1.0, -0.5, 0.0, 1.0])

  torch.frac(x) #返回小数部分

  torch.trunc(x) #返回整数部分

 torch.maximum(x, y)  torch.minimum(x, y)

5、Reduction operation

  torch.clamp(x, min, max) #x中元素小于min则置为min

  torch.lerp(x, y, weight(float)) #线性插值,x y都是tensor,weight是标量,返回x + weight*(y - x)

  torch.reciprocal(x, dim) #指定维度的累计积 yi=x1+x2+x3+...+xi

  torch.cumsum(x, dim) #指定维度的累计和 yi=x1+x2+x3+...+xi

  torch.dist(x, y, p=2) #返回(x - y)的p范数

  torch.norm(x, p=2) #输入张量的p范数

  torch.median(x, dim=-1) #指定维度上的中位数

  torch.mode(x, dim=-1) #指定维度上的众数值

 

②均值方差,总和总积

  torch.mean(x) # 所有元素的均值, dim表示消去某一维度的意思

  torch.mean(x, dim) #指定维度上的均值

  torch.sum(x) 

  torch.sum(x, dim)

  torch.var(x) #所有元素的方差

  torch.var(x,dim) 

  torch.prod(x) #所有元素的积

  torch.prod(x, dim) 

  torch.std(x) #所有元素的标准差

  torch.std(x, dim) 

  

6、比较操作

  torch.eq(x, y) #x = torch.rand(2,3); y = torch.randn(2,3);test = torch.eq(x,y) ,x y test的shape相同,test元素的值为bool类型。

  # eq==, ge>=, gt>,ne!=, le<=, ge<

  torch.max(x) # 返回x中元素最大值

  torch.max(x, dim) #返回x中指定维度上的最大值

  torch.kthvalue(x, dim) #返回x中指定维度上的第k小的值

  torch.sort(input, dim=None, descending=False) #默认输出 按最后一维降序排序的结果

  torch.topk(input, k, dim=None) #默认输出 按最后一维的k个最大值(维度内部降序排好)

 

2021-10-19 15:32:31

posted @ 2021-10-10 18:06  shines87  阅读(961)  评论(0编辑  收藏  举报