「masked_select 函数最关键的参数就是布尔掩码 mask,传入 mask 参数的布尔张量通过 True 和 False (或 1 和 0) 来决定输入张量对应位置的元素是否保留,既然是一一对应的关系,这就需要传入 mask 中的布尔张量和传入 input 中的输入张量形状要相同。」这里需要注意此时的形状相同包括显式的相等,还包括隐式的相等。
1. index_select 选择函数 torch.index_select(input,dim,index,out=None) 函数返回的是沿着输入张量的指定维度的指定索引号进行索引的张量子集,其中输入张量、指定维度和指定索引号就是 torch.index_select(input,dim,index,out=None) 函数的三个关键参数,函数参数有: input(Tensor) - 需要进行索引操作的输入张量...
masked_select(x, mask)) ''' tensor([[ 1.2001, 1.2968, -0.6657, -0.6907], [-2.0099, 0.6249, -0.5382, 1.4458], [ 0.0684, 0.4118, 0.1011, -0.5684]]) tensor([[ True, True, False, False], [False, True, False, True], [False, False, False, False]]) tensor([1.2001, 1.2968,...
使用index_select 函数输出的张量维度和原始的输入张量维度相同。这也是为什么即使在对输入张量的其中一个维度的一个索引号进行索引 (此时可以使用基本索引和切片索引) 时也需要使用 PyTorch 中的高级索引方式才能与 index_select 函数等价的原因所在; importtorch# 创建2D张量d=torch.arange(0,4).view([2,2])...
# PyTorch 1.3之后NCHW = [‘N’, ‘C’, ‘H’, ‘W’]images = torch.randn(32, 3, 56, 56, names=NCHW)images.sum('C')images.select('C', index=0)# 也可以这么设置tensor = torch.rand(3,4,1,2,names=('C', 'N', 'H', 'W'))# 使用align_to...
import torch b = torch.tensor([[1,2],[2,8]]) mask = b.ge(2) #大于或者等于2 print(mask) # 输出 tensor([[False, True], # [ True, True]]) print(torch.masked_select(b,mask)) # 输出 tensor([2, 2, 8]) 1.9 找出张量中的非零数值的索引 import torch eye = torch.eye(3) #...
5、torch.masked_select() torch.masked_select(input,mask,out=None) 按照给定的布尔掩码进行元素索引 input:输入的张量 mask:该张量的布尔掩码 示例: >>>x=torch.arange(12).reshape(3,4)>>>print(x)>>>mask=x.ge(5)>>>print(mask)tensor([[False, False, False, False],[False, True, True, Tr...
X2= torch.masked_select(X,mask) 还有条件选择这种不错的方式,也是一个值得推荐的方式。 x = torch.randn(1, 3) y= torch.randn(1, 3) z= torch.where(x>y,x,y) Tensor的简单操作 常用数学运算# torch.add():加法 torch.mul():乘法
(y_train_experts == 2)# Select an almost equal number of samples for each expert num_samples_per_expert = \ min(mask_expert1.sum(), mask_expert2.sum(), mask_expert3.sum()) x_expert1 = x_train_experts[mask_expert1][:num_samples_per_ex...
首先是masked_select函数,我们来看一个例子: 它要求mask和被mask的tensor的shape是一样的,然后从crossEntropy选出mask值为1的那些值。输出的维度会减1。 另外为了实现交叉熵这里使用了gather函数,这是一种比较底层的实现方法,更简便的方法应该使用CrossEntropyLoss或者NLLLoss,其中CrossEntropy等价与LogSoftmax+NLLLoss...