欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PyTorch学习笔记(1)张量

程序员文章站 2022-03-21 19:46:30
...

tensor

torch.tensor(data, # 数据 可以使list numpy
dtype=None, # 数据类型 默认与data一致
device=None, # 所在设备 cuda / cpu
requires_grad=False, # 是否需要梯度
pin_memory = False ,# 是否存于锁页内存)

flag = True
if flag:
     arr = np.ones((3,3))
     print('ndarray的数据类型:',arr.dtype)

     t = torch.tensor(arr,device='cuda')
     print(t)

张量拼接与切分

torch.cat()
将张量按维度dim 进行拼接 不会扩展张量的维度
tensors 张量序列
dim 要拼接的维度

torch.stack()
在新创建的维度dim 上进行拼接 会扩展张量的维度
tensors 张量序列
dim 要拼接的维度

flag = True
if flag:
     t = torch.ones((2,3))
     t_stack = torch.stack([t,t,t],dim=0)
     print('\n t_stack:{} shape:{}'.format(t_stack,t_stack.shape))

torch.chunk()
将张量按维度dim 进行平均切分
返回值 张量列表
不能整除 最后一份张量小于其他张量
input 要切分的张量
chunks 要切分的份数
dim 要切分的维度

flag = True
if flag:
     a = torch.ones((2,5))
     list_of_tensors = torch.chunk(a,dim=1,chunks=2)
     for idx ,t in enumerate(list_of_tensors):
          print('第{}个张量:{},shape is {}'.format(idx+1,t,t.shape))

torch.split()
将张量按维度dim 进行切分
返回值 张量列表
tensor 要切分的张量
split_size_or_sections 为int时,表示每一份的长度
为list时 按list元素切分
dim 要切分的维度

flag = True
if flag:
    t = torch.ones((2,5))
    list_of_tensors = torch.split(t,2,dim=1)
    for idx , t in enumerate(list_of_tensors):
        print('第{}个张量:{},shape is {}'.format(idx + 1, t, t.shape))

torch.index_select()
在维度dim上 按index索引数据
返回值 依index 索引数据拼接的张量
input 要索引的张量
dim 要索引的维度
index 要索引数据的序号

flag = True
if flag:
    t = torch.randint(0, 9, size=(3, 3))
     idx = torch.tensor([0, 2], dtype=torch.long)    # float
     t_select = torch.index_select(t, dim=0, index=idx)
    print("t:\n{}\nt_select:\n{}".format(t, t_select))

if flag:

    t = torch.randint(0, 9, size=(3, 3))
    mask = t.le(5)  # ge is mean greater than or equal/   gt: greater than  le  lt
    t_select = torch.masked_select(t, mask)
    print("t:\n{}\nmask:\n{}\nt_select:\n{} ".format(t, mask, t_select))