本文整理匯總了Python中torch.matmul方法的典型用法代碼示例。如果您正苦於以下問題:Python torch.matmul方法的具體用法?Python torch.matmul怎麽用?Python torch.matmul使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類torch
的用法示例。
在下文中一共展示了torch.matmul方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: _attn
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _attn(self, q, k, v, sequence_mask):
w = torch.matmul(q, k)
if self.scale:
w = w / math.sqrt(v.size(-1))
b_subset = self.b[:, :, :w.size(-2), :w.size(-1)]
if sequence_mask is not None:
b_subset = b_subset * sequence_mask.view(
sequence_mask.size(0), 1, -1)
b_subset = b_subset.permute(1, 0, 2, 3)
w = w * b_subset + -1e9 * (1 - b_subset)
w = nn.Softmax(dim=-1)(w)
w = self.attn_dropout(w)
return torch.matmul(w, v)
示例2: spatial_pool
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def spatial_pool(self, x):
batch, channel, height, width = x.size()
if self.pooling_type == 'att':
input_x = x
# [N, C, H * W]
input_x = input_x.view(batch, channel, height * width)
# [N, 1, C, H * W]
input_x = input_x.unsqueeze(1)
# [N, 1, H, W]
context_mask = self.conv_mask(x)
# [N, 1, H * W]
context_mask = context_mask.view(batch, 1, height * width)
# [N, 1, H * W]
context_mask = self.softmax(context_mask)
# [N, 1, H * W, 1]
context_mask = context_mask.unsqueeze(-1)
# [N, 1, C, 1]
context = torch.matmul(input_x, context_mask)
# [N, C, 1, 1]
context = context.view(batch, channel, 1, 1)
else:
# [N, C, 1, 1]
context = self.avg_pool(x)
return context
示例3: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def forward(self, query, key):
querys = self.W_query(query) # [N, T_q, num_units]
keys = self.W_key(key) # [N, T_k, num_units]
values = self.W_value(key)
split_size = self.num_units // self.num_heads
querys = torch.stack(torch.split(querys, split_size, dim=2), dim=0) # [h, N, T_q, num_units/h]
keys = torch.stack(torch.split(keys, split_size, dim=2), dim=0) # [h, N, T_k, num_units/h]
values = torch.stack(torch.split(values, split_size, dim=2), dim=0) # [h, N, T_k, num_units/h]
# score = softmax(QK^T / (d_k ** 0.5))
scores = torch.matmul(querys, keys.transpose(2, 3)) # [h, N, T_q, T_k]
scores = scores / (self.key_dim ** 0.5)
scores = F.softmax(scores, dim=3)
# out = score * V
out = torch.matmul(scores, values) # [h, N, T_q, num_units/h]
out = torch.cat(torch.split(out, 1, dim=0), dim=3).squeeze(0) # [N, T_q, num_units]
return out
示例4: attention
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [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)
示例5: similarity
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def similarity(self, C, Q, c_mask, q_mask):
"""
word2word dot-product similarity
Args:
C: (N, 5, Li, Lqa, D)
Q: (N, 1, Li, Lr, D)
c_mask: (N, 5, Li, Lqa)
q_mask: (N, 1, Li, Lr)
Returns:
(N, *, Lc, Lq)
"""
C = F.dropout(F.normalize(C, p=2, dim=-1), p=self.dropout, training=self.training)
Q = F.dropout(F.normalize(Q, p=2, dim=-1), p=self.dropout, training=self.training)
S_mask = torch.matmul(c_mask.unsqueeze(-1), q_mask.unsqueeze(-2)) # (N, 5, Li, Lqa, Lr)
S = torch.matmul(C, Q.transpose(-2, -1)) # (N, 5, Li, Lqa, Lr)
masked_S = S - 1e10*(1 - S_mask) # (N, 5, Li, Lqa, Lr)
return masked_S, S_mask
示例6: train
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def train(model, optimizer, loader, device, regression=False, ARR=0):
model.train()
total_loss = 0
for data in loader:
optimizer.zero_grad()
data = data.to(device)
out = model(data)
if regression:
loss = F.mse_loss(out, data.y.view(-1))
else:
loss = F.nll_loss(out, data.y.view(-1))
if ARR != 0:
for gconv in model.convs:
w = torch.matmul(
gconv.att,
gconv.basis.view(gconv.num_bases, -1)
).view(gconv.num_relations, gconv.in_channels, gconv.out_channels)
reg_loss = torch.sum((w[1:, :, :] - w[:-1, :, :])**2)
loss += ARR * reg_loss
loss.backward()
total_loss += loss.item() * num_graphs(data)
optimizer.step()
torch.cuda.empty_cache()
return total_loss / len(loader.dataset)
示例7: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def forward(self, z_enc_out, u_enc_out, u_input_np, m_t_input, degree_input, last_hidden, z_input_np):
sparse_z_input = Variable(self.get_sparse_selective_input(z_input_np), requires_grad=False)
m_embed = self.emb(m_t_input)
z_context = self.attn_z(last_hidden, z_enc_out)
u_context = self.attn_u(last_hidden, u_enc_out)
gru_in = torch.cat([m_embed, u_context, z_context, degree_input.unsqueeze(0)], dim=2)
gru_out, last_hidden = self.gru(gru_in, last_hidden)
gen_score = self.proj(torch.cat([z_context, u_context, gru_out], 2)).squeeze(0)
z_copy_score = F.tanh(self.proj_copy2(z_enc_out.transpose(0, 1)))
z_copy_score = torch.matmul(z_copy_score, gru_out.squeeze(0).unsqueeze(2)).squeeze(2)
z_copy_score = z_copy_score.cpu()
z_copy_score_max = torch.max(z_copy_score, dim=1, keepdim=True)[0]
z_copy_score = torch.exp(z_copy_score - z_copy_score_max) # [B,T]
z_copy_score = torch.log(torch.bmm(z_copy_score.unsqueeze(1), sparse_z_input)).squeeze(
1) + z_copy_score_max # [B,V]
z_copy_score = cuda_(z_copy_score)
scores = F.softmax(torch.cat([gen_score, z_copy_score], dim=1), dim=1)
gen_score, z_copy_score = scores[:, :cfg.vocab_size], \
scores[:, cfg.vocab_size:]
proba = gen_score + z_copy_score[:, :cfg.vocab_size] # [B,V]
proba = torch.cat([proba, z_copy_score[:, cfg.vocab_size:]], 1)
return proba, last_hidden, gru_out
示例8: _kernel_2d
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _kernel_2d(self, y, loc, h_var_inv, o_var_inv, c):
tc = c if self._model.obs_ndim > 0 else c.unsqueeze(-2)
# ===== Define covariance ===== #
ttc = tc.transpose(-2, -1)
diag_o_var_inv = construct_diag(o_var_inv if self._model.observable.ndim > 0 else o_var_inv.unsqueeze(-1))
t2 = torch.matmul(ttc, torch.matmul(diag_o_var_inv, tc))
cov = (construct_diag(h_var_inv) + t2).inverse()
# ===== Get mean ===== #
t1 = h_var_inv * loc
t2 = torch.matmul(diag_o_var_inv, y if y.dim() > 0 else y.unsqueeze(-1))
t3 = torch.matmul(ttc, t2.unsqueeze(-1))[..., 0]
m = torch.matmul(cov, (t1 + t3).unsqueeze(-1))[..., 0]
return MultivariateNormal(m, scale_tril=torch.cholesky(cov))
示例9: get_3d_box_batch
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def get_3d_box_batch(box_size, heading_angle, center):
''' box_size: [x1,x2,...,xn,3]
heading_angle: [x1,x2,...,xn]
center: [x1,x2,...,xn,3]
Return:
[x1,x3,...,xn,8,3]
'''
input_shape = heading_angle.shape
R = roty_batch(heading_angle)
l = np.expand_dims(box_size[...,0], -1) # [x1,...,xn,1]
w = np.expand_dims(box_size[...,1], -1)
h = np.expand_dims(box_size[...,2], -1)
corners_3d = np.zeros(tuple(list(input_shape)+[8,3]))
corners_3d[...,:,0] = np.concatenate((l/2,l/2,-l/2,-l/2,l/2,l/2,-l/2,-l/2), -1)
corners_3d[...,:,1] = np.concatenate((h/2,h/2,h/2,h/2,-h/2,-h/2,-h/2,-h/2), -1)
corners_3d[...,:,2] = np.concatenate((w/2,-w/2,-w/2,w/2,w/2,-w/2,-w/2,w/2), -1)
tlist = [i for i in range(len(input_shape))]
tlist += [len(input_shape)+1, len(input_shape)]
corners_3d = np.matmul(corners_3d, np.transpose(R, tuple(tlist)))
corners_3d += np.expand_dims(center, -2)
return corners_3d
示例10: _transform
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _transform(x, mat, maxmin):
rot = mat[:,0:3]
trans = mat[:,3:6]
x = x.contiguous().view(-1, x.size()[1] , x.size()[2] * x.size()[3])
max_val, min_val = maxmin[:,0], maxmin[:,1]
max_val, min_val = max_val.contiguous().view(-1,1), min_val.contiguous().view(-1,1)
max_val, min_val = max_val.repeat(1,3), min_val.repeat(1,3)
trans, rot = _trans_rot(trans, rot)
x1 = torch.matmul(rot,x)
min_val1 = torch.cat((min_val, Variable(min_val.data.new(min_val.size()[0], 1).fill_(1))), dim=-1)
min_val1 = min_val1.unsqueeze(-1)
min_val1 = torch.matmul(trans, min_val1)
min_val = torch.div( torch.add(torch.matmul(rot, min_val1).squeeze(-1), - min_val), torch.add(max_val, - min_val))
min_val = min_val.mul_(255)
x = torch.add(x1, min_val.unsqueeze(-1))
x = x.contiguous().view(-1,3, 224,224)
return x
開發者ID:microsoft,項目名稱:View-Adaptive-Neural-Networks-for-Skeleton-based-Human-Action-Recognition,代碼行數:26,代碼來源:transform_cnn.py
示例11: _rot
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _rot(rot):
cos_r, sin_r = rot.cos(), rot.sin()
zeros = rot.new(rot.size()[:2] + (1,)).zero_()
ones = rot.new(rot.size()[:2] + (1,)).fill_(1)
r1 = torch.stack((ones, zeros, zeros),dim=-1)
rx2 = torch.stack((zeros, cos_r[:,:,0:1], sin_r[:,:,0:1]), dim = -1)
rx3 = torch.stack((zeros, -sin_r[:,:,0:1], cos_r[:,:,0:1]), dim = -1)
rx = torch.cat((r1, rx2, rx3), dim = 2)
ry1 = torch.stack((cos_r[:,:,1:2], zeros, -sin_r[:,:,1:2]), dim =-1)
r2 = torch.stack((zeros, ones, zeros),dim=-1)
ry3 = torch.stack((sin_r[:,:,1:2], zeros, cos_r[:,:,1:2]), dim =-1)
ry = torch.cat((ry1, r2, ry3), dim = 2)
rz1 = torch.stack((cos_r[:,:,2:3], sin_r[:,:,2:3], zeros), dim =-1)
r3 = torch.stack((zeros, zeros, ones),dim=-1)
rz2 = torch.stack((-sin_r[:,:,2:3], cos_r[:,:,2:3],zeros), dim =-1)
rz = torch.cat((rz1, rz2, r3), dim = 2)
rot = rz.matmul(ry).matmul(rx)
return rot
開發者ID:microsoft,項目名稱:View-Adaptive-Neural-Networks-for-Skeleton-based-Human-Action-Recognition,代碼行數:25,代碼來源:data_cnn.py
示例12: _embedded_gaussian
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _embedded_gaussian(self, x):
batch_size = x.size(0)
# g=>(b, c, t, h, w)->(b, 0.5c, t, h, w)->(b, thw, 0.5c)
g_x = self.g(x).view(batch_size, self.inter_channels, -1)
g_x = g_x.permute(0, 2, 1)
# theta=>(b, c, t, h, w)[->(b, 0.5c, t, h, w)]->(b, thw, 0.5c)
# phi =>(b, c, t, h, w)[->(b, 0.5c, t, h, w)]->(b, 0.5c, thw)
# f=>(b, thw, 0.5c)dot(b, 0.5c, twh) = (b, thw, thw)
theta_x = self.theta(x).view(batch_size, self.inter_channels, -1)
theta_x = theta_x.permute(0, 2, 1)
phi_x = self.phi(x).view(batch_size, self.inter_channels, -1)
f = torch.matmul(theta_x, phi_x)
f_div_C = F.softmax(f, dim=-1)
# (b, thw, thw)dot(b, thw, 0.5c) = (b, thw, 0.5c)->(b, 0.5c, t, h, w)->(b, c, t, h, w)
y = torch.matmul(f_div_C, g_x)
y = y.permute(0, 2, 1).contiguous()
y = y.view(batch_size, self.inter_channels, *x.size()[2:])
W_y = self.W(y)
z = W_y + x
return z
示例13: _gaussian
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _gaussian(self, x):
batch_size = x.size(0)
g_x = self.g(x).view(batch_size, self.inter_channels, -1)
g_x = g_x.permute(0, 2, 1)
theta_x = x.view(batch_size, self.in_channels, -1)
theta_x = theta_x.permute(0, 2, 1)
if self.sub_sample_factor > 1:
phi_x = self.phi(x).view(batch_size, self.in_channels, -1)
else:
phi_x = x.view(batch_size, self.in_channels, -1)
f = torch.matmul(theta_x, phi_x)
f_div_C = F.softmax(f, dim=-1)
y = torch.matmul(f_div_C, g_x)
y = y.permute(0, 2, 1).contiguous()
y = y.view(batch_size, self.inter_channels, *x.size()[2:])
W_y = self.W(y)
z = W_y + x
return z
示例14: _dot_product
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def _dot_product(self, x):
batch_size = x.size(0)
g_x = self.g(x).view(batch_size, self.inter_channels, -1)
g_x = g_x.permute(0, 2, 1)
theta_x = self.theta(x).view(batch_size, self.inter_channels, -1)
theta_x = theta_x.permute(0, 2, 1)
phi_x = self.phi(x).view(batch_size, self.inter_channels, -1)
f = torch.matmul(theta_x, phi_x)
N = f.size(-1)
f_div_C = f / N
y = torch.matmul(f_div_C, g_x)
y = y.permute(0, 2, 1).contiguous()
y = y.view(batch_size, self.inter_channels, *x.size()[2:])
W_y = self.W(y)
z = W_y + x
return z
示例15: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import matmul [as 別名]
def forward(self, hidden_states, attention_mask):
mixed_query_layer = self.query(hidden_states)
mixed_key_layer = self.key(hidden_states)
mixed_value_layer = self.value(hidden_states)
query_layer = self.transpose_for_scores(mixed_query_layer)
key_layer = self.transpose_for_scores(mixed_key_layer)
value_layer = self.transpose_for_scores(mixed_value_layer)
# Take the dot product between "query" and "key" to get the raw attention scores.
attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2))
attention_scores = attention_scores / math.sqrt(self.attention_head_size)
# Apply the attention mask is (precomputed for all layers in BertModel forward() function)
attention_scores = attention_scores + attention_mask
# Normalize the attention scores to probabilities.
attention_probs = nn.Softmax(dim=-1)(attention_scores)
# This is actually dropping out entire tokens to attend to, which might
# seem a bit unusual, but is taken from the original Transformer paper.
attention_probs = self.dropout(attention_probs)
context_layer = torch.matmul(attention_probs, value_layer)
context_layer = context_layer.permute(0, 2, 1, 3).contiguous()
new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,)
context_layer = context_layer.view(*new_context_layer_shape)
return context_layer