「masked_select 函数最关键的参数就是布尔掩码 mask,传入 mask 参数的布尔张量通过 True 和 False (或 1 和 0) 来决定输入张量对应位置的元素是否保留,既然是一一对应的关系,这就需要传入 mask 中的布尔张量和传入 input 中的输入张量形状要相同。」这里需要注意此时的形状相同包括显式的相等,还包括隐式的相等。
importtorchx=torch.randn([3,4])print(x)# 将x中的每一个元素与0.5进行比较# 当元素大于等于0.5返回True,否则返回Falsemask=x.ge(0.5)print(mask)print(torch.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, ...
pytorch, masked_select masked_select需要数据和mask的size是一样的 example import torch data = torch.randn((51, 2)) mask = torch.empty(51).random_(2) mask = mask.unsqueeze(1).bool() print("select nums", mask.sum()) select = data.masked_select(mask.repeat(1,2)).view(-1, 2) prin...
首先是masked_select函数,我们来看一个例子: 它要求mask和被mask的tensor的shape是一样的,然后从crossEntropy选出mask值为1的那些值。输出的维度会减1。 另外为了实现交叉熵这里使用了gather函数,这是一种比较底层的实现方法,更简便的方法应该使用CrossEntropyLoss或者NLLLoss,其中CrossEntropy等价与LogSoftmax+NLLLoss...
torch.masked_select(input, mask, out=None):按照mask中的True进行索引,返回值:一维张量.input表示要索引的张量,mask表示与input同形状的布尔类型的张量。这种情况在选择符合某些特定条件的元素的时候非常好使,注意这个是返回一维的张量。看代码: 所以张量的索引,有两种方式:.index_select和.masked_select ...
但是这里还有一个问题,因为是一个batch的数据里有一些是padding的,因此这些位置的预测是没有必要计算loss的,因此我们需要使用前面的mask矩阵把对应位置的loss去掉,我们可以通过下面的函数来实现计算Masked的loss。 上面的代码有几个需要注意的地方。首先是masked_select函数,我们来看一个例子: 它要求mask和被mask的tensor...
[torch.FloatTensor of size 3x4] mask = x.ge(0.5) mask 1 1 0 1 1 1 1 0 1 0 0 0 [torch.ByteTensor of size 3x4] torch.masked_select(x, mask) 1.2045 2.4084 1.1372 0.5596 1.5677 0.6219 1.3635 [torch.FloatTensor of size 7]
「torch.masked_select(input, mask, out=None):按 mask 中的 True 进行索引,返回值:一维张量。input 表示要索引的张量,mask 表示与 input 同形状的布尔类型的张量。这种情况在选择符合某些特定条件的元素的时候非常好使」,注意这个是返回一维的张量。下面看代码: ...
pytorch学习(3) 索引与切片 普通索引 冒号索引(切片) index_select 选择特定索引 masked_select 选择符合条件的索引 take 索引 普通索引 index(有负索引) import torch a = torch.Tensor(2,3,32,32) print(a
>>> torch.masked_select(x, mask) tensor([ 1.2252, 0.5002, 0.6248, 2.0139])小知识点是这里使用了一个ge函数。该函数会逐元素比较array中的值和给定值的大小。然后返回布尔类型的tensor。总之要想用好masked_select,和各种能判断并生成布尔类型tensor的函数搭配起来才是正道。三...