「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...
mask_select会将满足mask(掩码、遮罩等等,随便翻译)的指示,将满足条件的点选出来。 根据掩码张量mask中的二元值,取输入张量中的指定项( mask为一个 ByteTensor),将取值返回到一个新的1D张量, 张量mask须跟input张量有相同数量的元素数目,但形状或维度不需要相同 x = torch.randn(3, 4) x 1.2045 2.4084 0.4001...
Pytorchmask_select函数的⽤法详解 ⾮常简单的函数,但是官⽹的介绍令⼈(令我)迷惑,所以稍加解释。mask_select会将满⾜mask(掩码、遮罩等等,随便翻译)的指⽰,将满⾜条件的点选出来。根据掩码张量mask中的⼆元值,取输⼊张量中的指定项( mask为⼀个 ByteTensor),将取值返回到⼀个新的1D...
前面已经介绍了 index_select 和 mask_select 两个选择函数,这两个函数通过一定的索引规则从输入张量中筛选出满足条件的元素值,只不过 index_select 函数使用索引 index 的索引规则,而 mask_select 函数使用布尔掩码 mask 的索引规则。 本小节介绍的 torch.nonzero(input, out = None, as_tuple = False) 函数与...
masked_select 根据mask(0/1, False/True 形式的mask)索引数据,返回1-D张量。 movedim 移动轴。如0,1轴交换:torch.movedim(t, 1, 0) . moveaxis 同movedim。Alias for torch.movedim().(这里发现pytorch很多地方会将dim和axis混用,概念都是一样的。) narrow 变窄的张量?从功能看还是索引。在指定轴上,...
pytorch中的select by mask #select by maskx = torch.randn(3,4)print(x)#tensor([[ 1.1132, 0.8882, -1.4683, 1.4100],#[-0.4903, -0.8422, 0.3576, 0.6806],#[-0.7180, -0.8218, -0.5010, -0.0607]])mask= x.ge(0.5)print(mask)#tensor([[1, 0, 1, 0],#[1, 0, 0, 0],#[0, 0, ...
>>> torch.masked_select(x, mask) tensor([1.2252,0.5002,0.6248,2.0139]) 小知识点是这里使用了一个ge函数。该函数会逐元素比较array中的值和给定值的大小。然后返回布尔类型的tensor。总之要想用好masked_select,和各种能判断并生成布尔类型tensor的函数搭配起来才是正道。
上面的代码有几个需要注意的地方。首先是masked_select函数,我们来看一个例子: 它要求mask和被mask的tensor的shape是一样的,然后从crossEntropy选出mask值为1的那些值。输出的维度会减1。 另外为了实现交叉熵这里使用了gather函数,这是一种比较底层的实现方法,更简便的方法应该使用CrossEntropyLoss或者NLLLoss,其中Cros...