写在前面:
- 本文中的代码来自于我自己的项目,都是根据个人需要进行的编写
- 其中的调用函数可能也是自己的
- 如果有错,希望您能提出并给予一定的指导
参考文章:
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
- label_att_2 = label_att_2.expand(128,128) # 报错 不为 1 的无法进行扩展
repeat
- label_att_2 = label_att_2.repeat(1,128.0/11.0) #报错 必须扩展为正数倍
reshape
- label_att_2 = label_att_2.reshape(128,128) # RuntimeError: shape ‘[128, 128]’ is invalid for input of size 1408
Linear1
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 | import torch |