new_empty
是获取一个同样device
和同样dtype
的tensor
,bernoulli_(p)
是根据概率p
产生0,1
序列(p是0)
,expand_as
扩展到同一维度。
def drop_tokens(embeddings, word_dropout):
batch, length, size = embeddings.size()
mask = embeddings.new_empty(batch, length)
mask = mask.bernoulli_(1 - word_dropout)
embeddings = embeddings * mask.unsqueeze(-1).expand_as(embeddings).float()
return embeddings, mask
sequence_mask
,tensor.lt
letter than
所有小于的是true
。
def sequence_mask(lengths, max_len=None):
batch_size=lengths.numel()
max_len=max_len or lengths.max()
return (torch.arange(0,max_len,device=lengths.device)
.type_as(lengths)
.unsqueeze(0).expand(batch_size,max_len)
.lt(lengths.unsqueeze(1)))