0%

Pytorch之tensor个人总结



写在前面:

  1. 本文中的代码来自于我自己的项目,都是根据个人需要进行的编写
  2. 其中的调用函数可能也是自己的
  3. 如果有错,希望您能提出并给予一定的指导

参考文章:

  1. 1. tensor 使用 onehot 编码 —-tensor的建立

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # label的权重矩阵 三维
    gt = np.random.randint(0, args.class_num, size=[args.embed_dim // 2, args.embed_dim // 2])
    # 先生成一个 (args.embed_dim // 2) * (args.embed_dim // 2) 的label,值在class_num以内,意思是class_num类分割任务
    gt = torch.LongTensor(gt)


    def get_one_hot(label, N):
    size = list(label.size())
    label = label.view(-1) # reshape 为向量
    ones = torch.sparse.torch.eye(N)
    ones = ones.index_select(0, label) # 用上面的办法转为换one hot
    size.append(N) # 把类别输目添到size的尾后,准备reshape回原来的尺寸
    return ones.view(*size)

    args.label_weight = get_one_hot(gt, args.class_num)

2. tensor 进行维度扩展 —其中一维是奇数

我的期望值是进行0扩展
朋友提出的思路是通过一次Liner
虽然我觉得不对
选择使用 torch.cat 实现

各种失败的尝试:
expend

  1. label_att_2 = label_att_2.expand(128,128) # 报错 不为 1 的无法进行扩展

repeat

  1. label_att_2 = label_att_2.repeat(1,128.0/11.0) #报错 必须扩展为正数倍

reshape

  1. label_att_2 = label_att_2.reshape(128,128) # RuntimeError: shape ‘[128, 128]’ is invalid for input of size 1408

Linear

1
2
3
4
# print(label_att_2.shape)  # torch.Size([128, 11])
connected_layer = nn.Linear(in_features=11,out_features=128)
label_att_2 = connected_layer(label_att_2)
# print(label_att_2.shape) # torch.Size([128, 128])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import torch
import numpy as np

label = np.eye(11)
label = torch.LongTensor(label)
# print(label)
# print(label.shape)

zero = torch.zeros(11,(128-11))
# print(zero)
# print(zero.shape)

res = torch.cat((label,zero),1)
# print(res)
# print(res.shape)

zero1 = torch.zeros((128-11),128)
# print(zero1.shape)

res1 = torch.cat((res,zero1),0)
print(res1.shape)

3.