本文整理匯總了Python中torch.softmax方法的典型用法代碼示例。如果您正苦於以下問題:Python torch.softmax方法的具體用法?Python torch.softmax怎麽用?Python torch.softmax使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類torch
的用法示例。
在下文中一共展示了torch.softmax方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: update_coatt_cat_maxpool
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def update_coatt_cat_maxpool(self, query_embed, in_memory_embed, out_memory_embed, query_att, atten_mask=None, ctx_mask=None, query_mask=None):
attention = torch.bmm(query_embed, in_memory_embed.view(in_memory_embed.size(0), -1, in_memory_embed.size(-1))\
.transpose(1, 2)).view(query_embed.size(0), query_embed.size(1), in_memory_embed.size(1), -1) # bs * N * M * k
if ctx_mask is not None:
attention[:, :, :, -1] = ctx_mask.unsqueeze(1) * attention[:, :, :, -1].clone() - (1 - ctx_mask).unsqueeze(1) * INF
if atten_mask is not None:
attention = atten_mask.unsqueeze(1).unsqueeze(-1) * attention - (1 - atten_mask).unsqueeze(1).unsqueeze(-1) * INF
if query_mask is not None:
attention = query_mask.unsqueeze(2).unsqueeze(-1) * attention - (1 - query_mask).unsqueeze(2).unsqueeze(-1) * INF
# Importance module
kb_feature_att = F.max_pool1d(attention.view(attention.size(0), attention.size(1), -1).transpose(1, 2), kernel_size=attention.size(1)).squeeze(-1).view(attention.size(0), -1, attention.size(-1))
kb_feature_att = torch.softmax(kb_feature_att, dim=-1).view(-1, kb_feature_att.size(-1)).unsqueeze(1)
in_memory_embed = torch.bmm(kb_feature_att, in_memory_embed.view(-1, in_memory_embed.size(2), in_memory_embed.size(-1))).squeeze(1).view(in_memory_embed.size(0), in_memory_embed.size(1), -1)
out_memory_embed = out_memory_embed.sum(2)
# Enhanced module
attention = F.max_pool1d(attention.view(attention.size(0), -1, attention.size(-1)), kernel_size=attention.size(-1)).squeeze(-1).view(attention.size(0), attention.size(1), attention.size(2))
probs = torch.softmax(attention, dim=-1)
new_query_embed = query_embed + query_att.unsqueeze(2) * torch.bmm(probs, out_memory_embed)
probs2 = torch.softmax(attention, dim=1)
kb_att = torch.bmm(query_att.unsqueeze(1), probs).squeeze(1)
in_memory_embed = in_memory_embed + kb_att.unsqueeze(2) * torch.bmm(probs2.transpose(1, 2), new_query_embed)
return new_query_embed, in_memory_embed, out_memory_embed
示例2: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def forward(self, query_embed, in_memory_embed, atten_mask=None):
if self.atten_type == 'simple': # simple attention
attention = torch.bmm(in_memory_embed, query_embed.unsqueeze(2)).squeeze(2)
elif self.atten_type == 'mul': # multiplicative attention
attention = torch.bmm(in_memory_embed, torch.mm(query_embed, self.W).unsqueeze(2)).squeeze(2)
elif self.atten_type == 'add': # additive attention
attention = torch.tanh(torch.mm(in_memory_embed.view(-1, in_memory_embed.size(-1)), self.W2)\
.view(in_memory_embed.size(0), -1, self.W2.size(-1)) \
+ torch.mm(query_embed, self.W).unsqueeze(1))
attention = torch.mm(attention.view(-1, attention.size(-1)), self.W3).view(attention.size(0), -1)
else:
raise RuntimeError('Unknown atten_type: {}'.format(self.atten_type))
if atten_mask is not None:
# Exclude masked elements from the softmax
attention = atten_mask * attention - (1 - atten_mask) * INF
return attention
示例3: attention
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def attention(self, query, key, value, mask=None, dropout=None):
""" Compute 'Scaled Dot Product Attention'
Args:
query: (N, nh, L, d_k)
key: (N, nh, L, d_k)
value: (N, nh, L, d_k)
mask: (N, 1, L, 1)
dropout:
"""
scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(self.d_k) # (N, nh, L, L)
if mask is not None:
scores = scores.masked_fill(mask == 0, -1e9)
p_attn = torch.softmax(scores, dim=-1)
if dropout is not None:
p_attn = dropout(p_attn)
return torch.matmul(p_attn, value), p_attn # (N, nh, L, d_k), (N, nh, L, L)
示例4: _visualize_params
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def _visualize_params(logits_pis, means, log_scales, channel):
"""
:param logits_pis: NCKHW
:param means: NCKHW
:param log_scales: NCKHW
:param channel: int
:return:
"""
assert logits_pis.shape == means.shape == log_scales.shape
logits_pis = logits_pis[0, channel, ...].detach()
means = means[0, channel, ...].detach()
log_scales = log_scales[0, channel, ...].detach()
pis = torch.softmax(logits_pis, dim=0) # Kdim==0 -> KHW
mixtures = ft.lconcat(
zip(_iter_Kdim_normalized(pis, normalize=False),
_iter_Kdim_normalized(means),
_iter_Kdim_normalized(log_scales)))
grid = vis.grid.prep_for_grid(mixtures)
img = torchvision.utils.make_grid(grid, nrow=3)
return img
示例5: inference
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def inference(self, head, x, proposals, valid_size, img_size):
x = x[self.min_level:self.min_level + self.levels]
if not proposals.all_none:
# Run head on the given proposals
proposals, proposals_idx = proposals.contiguous
cls_logits, bbx_logits = self._head(head, x, proposals, proposals_idx, img_size)
# Shift the proposals according to the logits
bbx_reg_weights = x[0].new(self.bbx_reg_weights)
boxes = shift_boxes(proposals.unsqueeze(1), bbx_logits / bbx_reg_weights)
scores = torch.softmax(cls_logits, dim=1)
# Split boxes and scores by image, clip to valid size
boxes, scores = self._split_and_clip(boxes, scores, proposals_idx, valid_size)
bbx_pred, cls_pred, obj_pred = self.prediction_generator(boxes, scores)
else:
bbx_pred = PackedSequence([None for _ in range(x[0].size(0))])
cls_pred = PackedSequence([None for _ in range(x[0].size(0))])
obj_pred = PackedSequence([None for _ in range(x[0].size(0))])
return bbx_pred, cls_pred, obj_pred
示例6: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def forward(self, xs):
r"""Aggregates representations across different layers.
Args:
xs (list or tuple): List containing layer-wise representations.
"""
assert isinstance(xs, list) or isinstance(xs, tuple)
if self.mode == 'cat':
return torch.cat(xs, dim=-1)
elif self.mode == 'max':
return torch.stack(xs, dim=-1).max(dim=-1)[0]
elif self.mode == 'lstm':
x = torch.stack(xs, dim=1) # [num_nodes, num_layers, num_channels]
alpha, _ = self.lstm(x)
alpha = self.att(alpha).squeeze(-1) # [num_nodes, num_layers]
alpha = torch.softmax(alpha, dim=-1)
return (x * alpha.unsqueeze(-1)).sum(dim=1)
示例7: __init__
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def __init__(self,
g,
in_channels,
out_channels,
heads=1,
negative_slope=0.2,
dropout=0):
super(GATSPMVConv, self).__init__()
self.g = g
self.out_channels = out_channels
self.heads = heads
self.negative_slope = negative_slope
self.dropout = dropout
self.weight = Parameter(
torch.Tensor(in_channels, heads * out_channels))
self.att_l = Parameter(torch.Tensor(heads, out_channels, 1))
self.att_r = Parameter(torch.Tensor(heads, out_channels, 1))
self.bias = Parameter(torch.Tensor(heads * out_channels))
self.softmax = EdgeSoftmax()
self.reset_parameters()
示例8: infer_one_sentence
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def infer_one_sentence(self, sentence):
self.net.eval()
tokenized = self.tokenizer.encode(sentence); #print(tokenized)
e1_e2_start = self.get_e1e2_start(tokenized); #print(e1_e2_start)
tokenized = torch.LongTensor(tokenized).unsqueeze(0)
e1_e2_start = torch.LongTensor(e1_e2_start).unsqueeze(0)
attention_mask = (tokenized != self.pad_id).float()
token_type_ids = torch.zeros((tokenized.shape[0], tokenized.shape[1])).long()
if self.cuda:
tokenized = tokenized.cuda()
attention_mask = attention_mask.cuda()
token_type_ids = token_type_ids.cuda()
with torch.no_grad():
classification_logits = self.net(tokenized, token_type_ids=token_type_ids, attention_mask=attention_mask, Q=None,\
e1_e2_start=e1_e2_start)
predicted = torch.softmax(classification_logits, dim=1).max(1)[1].item()
print("Sentence: ", sentence)
print("Predicted: ", self.rm.idx2rel[predicted].strip(), '\n')
return predicted
示例9: evaluate
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def evaluate(args, net, dataset, segment='valid'):
possible_rating_values = dataset.possible_rating_values
nd_possible_rating_values = th.FloatTensor(possible_rating_values).to(args.device)
if segment == "valid":
rating_values = dataset.valid_truths
enc_graph = dataset.valid_enc_graph
dec_graph = dataset.valid_dec_graph
elif segment == "test":
rating_values = dataset.test_truths
enc_graph = dataset.test_enc_graph
dec_graph = dataset.test_dec_graph
else:
raise NotImplementedError
# Evaluate RMSE
net.eval()
with th.no_grad():
pred_ratings = net(enc_graph, dec_graph,
dataset.user_feature, dataset.movie_feature)
real_pred_ratings = (th.softmax(pred_ratings, dim=1) *
nd_possible_rating_values.view(1, -1)).sum(dim=1)
rmse = ((real_pred_ratings - rating_values) ** 2.).mean().item()
rmse = np.sqrt(rmse)
return rmse
示例10: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def forward(self, key, value, query, mask=None, query_mask=None):
# Get attention score
attn = t.bmm(query, key.transpose(1, 2))
attn = attn / math.sqrt(self.num_hidden_k)
# Masking to ignore padding (key side)
if mask is not None:
attn = attn.masked_fill(mask, -2 ** 32 + 1)
attn = t.softmax(attn, dim=-1)
else:
attn = t.softmax(attn, dim=-1)
# Masking to ignore padding (query side)
if query_mask is not None:
attn = attn * query_mask
# Dropout
# attn = self.attn_dropout(attn)
# Get Context Vector
result = t.bmm(attn, value)
return result, attn
示例11: _fspecial_gauss
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def _fspecial_gauss(window_size, sigma=1.5):
# Function to mimic the 'fspecial' gaussian MATLAB function.
coords = np.arange(0, window_size, dtype=np.float32)
coords -= (window_size - 1) / 2.0
g = coords ** 2
g *= (-0.5 / (sigma ** 2))
g = np.reshape(g, (1, -1)) + np.reshape(g, (-1, 1))
g = torch.from_numpy(np.reshape(g, (1, -1)))
g = torch.softmax(g, dim=1)
g = g / g.sum()
return g
# 2019.05.26. butterworth filter.
# ref: http://www.cnblogs.com/laumians-notes/p/8592968.html
示例12: predict
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def predict(model, sentence, _fields):
# expand fields
text_field, label_field = _fields
# encode sentence
encoded_sequence = torch.LongTensor([ text_field.vocab.stoi[token]
for token in text_field.preprocess(sentence) ]).view(1, -1)
if torch.cuda.is_available():
encoded_sequence = encoded_sequence.cuda()
# forward; explicitly state batch_size
with torch.no_grad():
likelihood = model(encoded_sequence, batch_size=1)
sentiment = label_field.vocab.itos[
torch.softmax(likelihood.view(2), dim=-1).argmax().item()
]
# present results
print('\ninput : {}\noutput : {}\n'.format(sentence, sentiment))
return sentiment
示例13: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def forward(self, queries, keys, values, attention_mask=None, attention_weights=None):
'''
Computes
:param queries: Queries (b_s, nq, d_model)
:param keys: Keys (b_s, nk, d_model)
:param values: Values (b_s, nk, d_model)
:param attention_mask: Mask over attention values (b_s, h, nq, nk). True indicates masking.
:param attention_weights: Multiplicative weights for attention values (b_s, h, nq, nk).
:return:
'''
b_s, nq = queries.shape[:2]
nk = keys.shape[1]
q = self.fc_q(queries).view(b_s, nq, self.h, self.d_k).permute(0, 2, 1, 3) # (b_s, h, nq, d_k)
k = self.fc_k(keys).view(b_s, nk, self.h, self.d_k).permute(0, 2, 3, 1) # (b_s, h, d_k, nk)
v = self.fc_v(values).view(b_s, nk, self.h, self.d_v).permute(0, 2, 1, 3) # (b_s, h, nk, d_v)
att = torch.matmul(q, k) / np.sqrt(self.d_k) # (b_s, h, nq, nk)
if attention_weights is not None:
att = att * attention_weights
if attention_mask is not None:
att = att.masked_fill(attention_mask, -np.inf)
att = torch.softmax(att, -1)
out = torch.matmul(att, v).permute(0, 2, 1, 3).contiguous().view(b_s, nq, self.h * self.d_v) # (b_s, nq, h*d_v)
out = self.fc_o(out) # (b_s, nq, d_model)
return out
示例14: top_k_softmax
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def top_k_softmax(logits, k, n):
top_logits, top_indices = torch.topk(logits, k=min(k + 1, n))
top_k_logits = top_logits[:, :k]
top_k_indices = top_indices[:, :k]
probs = torch.softmax(top_k_logits, dim=-1)
batch = top_k_logits.shape[0]
k = top_k_logits.shape[1]
# Flat to 1D
indices_flat = torch.reshape(top_k_indices, [-1])
indices_flat = indices_flat + torch.div(
torch.arange(batch * k, device=logits.device), k) * n
tensor = torch.zeros([batch * n], dtype=logits.dtype,
device=logits.device)
tensor = tensor.scatter_add(0, indices_flat.long(),
torch.reshape(probs, [-1]))
return torch.reshape(tensor, [batch, n])
示例15: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import softmax [as 別名]
def forward(self, x):
"""Forward."""
seq_length = x.shape[1]
x_1 = x.unsqueeze(dim=2).repeat(1, 1, seq_length, 1)
x_2 = x.unsqueeze(dim=1).repeat(1, seq_length, 1, 1)
x_concat = torch.cat([x_1, x_2, x_1 * x_2], dim=-1)
# Self-attention layer.
x_concat = self.dropout(x_concat)
attn_matrix = self.att_linear(x_concat).squeeze(dim=-1)
attn_weight = torch.softmax(attn_matrix, dim=2)
attn = torch.bmm(attn_weight, x)
# Semantic composite fuse gate.
x_attn_concat = self.dropout(torch.cat([x, attn], dim=-1))
x_attn_concat = torch.cat([x, attn], dim=-1)
z = torch.tanh(self.z_gate(x_attn_concat))
r = torch.sigmoid(self.r_gate(x_attn_concat))
f = torch.sigmoid(self.f_gate(x_attn_concat))
encoding = r * x + f * z
return encoding