本文整理汇总了Python中torch.unbind方法的典型用法代码示例。如果您正苦于以下问题:Python torch.unbind方法的具体用法?Python torch.unbind怎么用?Python torch.unbind使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类torch
的用法示例。
在下文中一共展示了torch.unbind方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: fit_positive
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def fit_positive(rows, cols, yx_min, yx_max, anchors):
device_id = anchors.get_device() if torch.cuda.is_available() else None
batch_size, num, _ = yx_min.size()
num_anchors, _ = anchors.size()
valid = torch.prod(yx_min < yx_max, -1)
center = (yx_min + yx_max) / 2
ij = torch.floor(center)
i, j = torch.unbind(ij.long(), -1)
index = i * cols + j
anchors2 = anchors / 2
iou_matrix = utils.iou.torch.iou_matrix((yx_min - center).view(-1, 2), (yx_max - center).view(-1, 2), -anchors2, anchors2).view(batch_size, -1, num_anchors)
iou, index_anchor = iou_matrix.max(-1)
_positive = []
cells = rows * cols
for valid, index, index_anchor in zip(torch.unbind(valid), torch.unbind(index), torch.unbind(index_anchor)):
index, index_anchor = (t[valid] for t in (index, index_anchor))
t = utils.ensure_device(torch.ByteTensor(cells, num_anchors).zero_(), device_id)
t[index, index_anchor] = 1
_positive.append(t)
return torch.stack(_positive)
示例2: forward
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def forward(self, q, v):
alpha = self.process_attention(q, v)
if self.mlp_glimpses > 0:
alpha = self.linear0(alpha)
alpha = F.relu(alpha)
alpha = self.linear1(alpha)
alpha = F.softmax(alpha, dim=1)
if alpha.size(2) > 1: # nb_glimpses > 1
alphas = torch.unbind(alpha, dim=2)
v_outs = []
for alpha in alphas:
alpha = alpha.unsqueeze(2).expand_as(v)
v_out = alpha*v
v_out = v_out.sum(1)
v_outs.append(v_out)
v_out = torch.cat(v_outs, dim=1)
else:
alpha = alpha.expand_as(v)
v_out = alpha*v
v_out = v_out.sum(1)
return v_out
示例3: compute_kl_div
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def compute_kl_div(self):
r"""Compute :math:`KL(q(z|c) \| p(z))`.
Returns:
float: :math:`KL(q(z|c) \| p(z))`.
"""
prior = torch.distributions.Normal(
torch.zeros(self._latent_dim).to(global_device()),
torch.ones(self._latent_dim).to(global_device()))
posteriors = [
torch.distributions.Normal(mu, torch.sqrt(var)) for mu, var in zip(
torch.unbind(self.z_means), torch.unbind(self.z_vars))
]
kl_divs = [
torch.distributions.kl.kl_divergence(post, prior)
for post in posteriors
]
kl_div_sum = torch.sum(torch.stack(kl_divs))
return kl_div_sum
示例4: forward
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def forward(self, x, state):
c, h = state
gates = self.gates(torch.cat([x, h], 1))
if self.layer_norm is not None:
combined = self.layer_norm(
torch.reshape(gates, [-1, 4, self.output_size]))
else:
combined = torch.reshape(gates, [-1, 4, self.output_size])
i, j, f, o = torch.unbind(combined, 1)
i, f, o = torch.sigmoid(i), torch.sigmoid(f), torch.sigmoid(o)
new_c = f * c + i * torch.tanh(j)
if self.activation is None:
# Do not use tanh activation
new_h = o * new_c
else:
new_h = o * self.activation(new_c)
return new_h, (new_c, new_h)
示例5: rotation_matrix_to_quaternion
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def rotation_matrix_to_quaternion(R): # [B,3,3]
row0,row1,row2 = torch.unbind(R,dim=-2)
R00,R01,R02 = torch.unbind(row0,dim=-1)
R10,R11,R12 = torch.unbind(row1,dim=-1)
R20,R21,R22 = torch.unbind(row2,dim=-1)
t = R[...,0,0]+R[...,1,1]+R[...,2,2]
r = (1+t).sqrt()
qa = 0.5*r
qb = (R21-R12).sign()*0.5*(1+R00-R11-R22).sqrt()
qc = (R02-R20).sign()*0.5*(1-R00+R11-R22).sqrt()
qd = (R10-R01).sign()*0.5*(1-R00-R11+R22).sqrt()
q = torch.stack([qa,qb,qc,qd],dim=-1)
for i,qi in enumerate(q):
if torch.isnan(qi).any():
print(i)
K = torch.stack([torch.stack([R00-R11-R22,R10+R01,R20+R02,R12-R21],dim=-1),
torch.stack([R10+R01,R11-R00-R22,R21+R12,R20-R20],dim=-1),
torch.stack([R20+R02,R21+R12,R22-R00-R11,R01-R10],dim=-1),
torch.stack([R12-R21,R20-R02,R01-R10,R00+R11+R22],dim=-1)],dim=-2)/3.0
K = K[i]
eigval,eigvec = K.eig(eigenvectors=True)
idx = eigval[:,0].argmax()
V = eigvec[:,idx]
q[i] = torch.stack([V[3],V[0],V[1],V[2]])
return q
示例6: calc_f1_batch
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def calc_f1_batch(self, decoded_data, target_data):
"""
update statics for f1 score.
Parameters
----------
decoded_data: ``torch.LongTensor``, required.
the decoded best label index pathes.
target_data: ``torch.LongTensor``, required.
the golden label index pathes.
"""
batch_decoded = torch.unbind(decoded_data, 1)
for decoded, target in zip(batch_decoded, target_data):
length = len(target)
best_path = decoded[:length]
correct_labels_i, total_labels_i, gold_count_i, guess_count_i, overlap_count_i = self.eval_instance(best_path.numpy(), target)
self.correct_labels += correct_labels_i
self.total_labels += total_labels_i
self.gold_count += gold_count_i
self.guess_count += guess_count_i
self.overlap_count += overlap_count_i
示例7: calc_acc_batch
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def calc_acc_batch(self, decoded_data, target_data):
"""
update statics for accuracy score.
Parameters
----------
decoded_data: ``torch.LongTensor``, required.
the decoded best label index pathes.
target_data: ``torch.LongTensor``, required.
the golden label index pathes.
"""
batch_decoded = torch.unbind(decoded_data, 1)
for decoded, target in zip(batch_decoded, target_data):
# remove padding
length = len(target)
best_path = decoded[:length].numpy()
self.total_labels += length
self.correct_labels += np.sum(np.equal(best_path, gold))
示例8: batch_transform
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def batch_transform(batch, transform):
"""Applies a transform to a batch of samples.
Keyword arguments:
- batch (): a batch os samples
- transform (callable): A function/transform to apply to ``batch``
"""
# Convert the single channel label to RGB in tensor form
# 1. torch.unbind removes the 0-dimension of "labels" and returns a tuple of
# all slices along that dimension
# 2. the transform is applied to each slice
transf_slices = [transform(tensor) for tensor in torch.unbind(batch)]
return torch.stack(transf_slices)
示例9: batch_transform
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def batch_transform(batch, transform):
"""Applies a transform to a batch of samples.
Keyword arguments:
- batch (): a batch os samples
- transform (callable): A function/transform to apply to ``batch``
"""
# Convert the single channel label to RGB in tensor form
# 1. F.unbind removes the 0-dimension of "labels" and returns a tuple of
# all slices along that dimension
# 2. the transform is applied to each slice
transf_slices = [transform(tensor) for tensor in F.unbind(batch)]
return F.stack(transf_slices)
示例10: get_cached_data_loader
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def get_cached_data_loader(dataset, batch_size, discriminator, shuffle=False, device="cpu"):
data_loader = torch.utils.data.DataLoader(dataset=dataset, batch_size=batch_size, collate_fn=collate_fn)
xs = []
ys = []
for batch_idx, (x, y) in enumerate(tqdm(data_loader, ascii=True)):
with torch.no_grad():
x = x.to(device)
avg_rep = discriminator.avg_representation(x).cpu().detach()
avg_rep_list = torch.unbind(avg_rep.unsqueeze(1))
xs += avg_rep_list
ys += y.cpu().numpy().tolist()
data_loader = torch.utils.data.DataLoader(
dataset=Dataset(xs, ys), batch_size=batch_size, shuffle=shuffle, collate_fn=cached_collate_fn
)
return data_loader
示例11: forward
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def forward(self, q, v):
alpha = self.process_attention(q, v)
if self.mlp_glimpses > 0:
alpha = self.linear0(alpha)
alpha = F.relu(alpha)
alpha = self.linear1(alpha)
alpha = F.softmax(alpha, dim=1)
if alpha.size(2) > 1: # nb_glimpses > 1
alphas = torch.unbind(alpha, dim=2)
v_outs = []
for alpha in alphas:
alpha = alpha.unsqueeze(2).expand_as(v)
v_out = alpha*v
v_out = v_out.sum(1)
v_outs.append(v_out)
v_out = torch.cat(v_outs, dim=1)
else:
alpha = alpha.expand_as(v)
v_out = alpha*v
v_out = v_out.sum(1)
return v_out
示例12: transformImage
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def transformImage(opt,image,pMtrx):
refMtrx = torch.from_numpy(opt.refMtrx).cuda()
refMtrx = refMtrx.repeat(opt.batchSize,1,1)
transMtrx = refMtrx.matmul(pMtrx)
# warp the canonical coordinates
X,Y = np.meshgrid(np.linspace(-1,1,opt.W),np.linspace(-1,1,opt.H))
X,Y = X.flatten(),Y.flatten()
XYhom = np.stack([X,Y,np.ones_like(X)],axis=1).T
XYhom = np.tile(XYhom,[opt.batchSize,1,1]).astype(np.float32)
XYhom = torch.from_numpy(XYhom).cuda()
XYwarpHom = transMtrx.matmul(XYhom)
XwarpHom,YwarpHom,ZwarpHom = torch.unbind(XYwarpHom,dim=1)
Xwarp = (XwarpHom/(ZwarpHom+1e-8)).reshape(opt.batchSize,opt.H,opt.W)
Ywarp = (YwarpHom/(ZwarpHom+1e-8)).reshape(opt.batchSize,opt.H,opt.W)
grid = torch.stack([Xwarp,Ywarp],dim=-1)
# sampling with bilinear interpolation
imageWarp = torch.nn.functional.grid_sample(image,grid,mode="bilinear")
return imageWarp
示例13: sentencewise_scores2paragraph_tokenwise_scores
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def sentencewise_scores2paragraph_tokenwise_scores(sentences_scores, sentences_mask):
"""
# Input:
# sentences_mask: (batch_size X num_sentences X sent_seq_len)
# sentences_scores: (batch_size X num_sentences)
# Output:
# paragraph_tokenwise_scores: (batch_size X max_para_seq_len)
"""
paragraph_tokenwise_scores = []
for instance_sentences_scores, instance_sentences_mask in zip(torch.unbind(sentences_scores, dim=0),
torch.unbind(sentences_mask, dim=0)):
instance_paragraph_tokenwise_scores = torch.masked_select(instance_sentences_scores.unsqueeze(-1),
instance_sentences_mask.byte())
paragraph_tokenwise_scores.append(instance_paragraph_tokenwise_scores)
paragraph_tokenwise_scores = torch.nn.utils.rnn.pad_sequence(paragraph_tokenwise_scores, batch_first=True)
return paragraph_tokenwise_scores
示例14: get_cached_data_loader
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def get_cached_data_loader(dataset, batch_size, discriminator,
shuffle=False, device='cpu'):
data_loader = torch.utils.data.DataLoader(dataset=dataset,
batch_size=batch_size,
collate_fn=collate_fn)
xs = []
ys = []
for batch_idx, (x, y) in enumerate(tqdm(data_loader, ascii=True)):
with torch.no_grad():
x = x.to(device)
avg_rep = discriminator.avg_representation(x).cpu().detach()
avg_rep_list = torch.unbind(avg_rep.unsqueeze(1))
xs += avg_rep_list
ys += y.cpu().numpy().tolist()
data_loader = torch.utils.data.DataLoader(
dataset=Dataset(xs, ys),
batch_size=batch_size,
shuffle=shuffle,
collate_fn=cached_collate_fn)
return data_loader
示例15: _assert_attributions
# 需要导入模块: import torch [as 别名]
# 或者: from torch import unbind [as 别名]
def _assert_attributions(
self,
model: Module,
layer: Module,
inputs: Tensor,
baselines: Union[Tensor, Callable[..., Tensor]],
neuron_ind: Union[int, tuple],
n_samples: int = 5,
) -> None:
ngs = NeuronGradientShap(model, layer)
nig = NeuronIntegratedGradients(model, layer)
attrs_gs = ngs.attribute(
inputs, neuron_ind, baselines=baselines, n_samples=n_samples, stdevs=0.09
)
if callable(baselines):
baselines = baselines(inputs)
attrs_ig = []
for baseline in torch.unbind(baselines):
attrs_ig.append(
nig.attribute(inputs, neuron_ind, baselines=baseline.unsqueeze(0))
)
combined_attrs_ig = torch.stack(attrs_ig, dim=0).mean(dim=0)
assertTensorAlmostEqual(self, attrs_gs, combined_attrs_ig, 0.5)