本文整理匯總了Python中torch.trace方法的典型用法代碼示例。如果您正苦於以下問題:Python torch.trace方法的具體用法?Python torch.trace怎麽用?Python torch.trace使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類torch
的用法示例。
在下文中一共展示了torch.trace方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: get_loss
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def get_loss(pred, y, criterion, mtr, a=0.5):
"""
To calculate loss
:param pred: predicted value
:param y: actual value
:param criterion: nn.CrossEntropyLoss
:param mtr: beta matrix
"""
mtr_t = torch.transpose(mtr, 1, 2)
aa = torch.bmm(mtr, mtr_t)
loss_fn = 0
for i in range(aa.size()[0]):
aai = torch.add(aa[i, ], Variable(torch.neg(torch.eye(mtr.size()[1]))))
loss_fn += torch.trace(torch.mul(aai, aai).data)
loss_fn /= aa.size()[0]
loss = torch.add(criterion(pred, y), Variable(torch.FloatTensor([loss_fn * a])))
return loss
示例2: feature_smoothing
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def feature_smoothing(self, adj, X):
adj = (adj.t() + adj)/2
rowsum = adj.sum(1)
r_inv = rowsum.flatten()
D = torch.diag(r_inv)
L = D - adj
r_inv = r_inv + 1e-3
r_inv = r_inv.pow(-1/2).flatten()
r_inv[torch.isinf(r_inv)] = 0.
r_mat_inv = torch.diag(r_inv)
# L = r_mat_inv @ L
L = r_mat_inv @ L @ r_mat_inv
XLXT = torch.matmul(torch.matmul(X.t(), L), X)
loss_smooth_feat = torch.trace(XLXT)
return loss_smooth_feat
示例3: batch_mat2angle
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def batch_mat2angle(R):
""" Calcuate the axis angles (twist) from a batch of rotation matrices
Ethan Eade's lie group note:
http://ethaneade.com/lie.pdf equation (17)
function tested in 'test_geometry.py'
:input
:param Rotation matrix Bx3x3 \in \SO3 space
--------
:return
:param the axis angle B
"""
R1 = [torch.trace(R[i]) for i in range(R.size()[0])]
R_trace = torch.stack(R1)
# clamp if the angle is too large (break small angle assumption)
# @todo: not sure whether it is absoluately necessary in training.
angle = acos( ((R_trace - 1)/2).clamp(-1,1))
return angle
示例4: evaluate
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def evaluate(X_data, name='Eval'):
model.eval()
eval_idx_list = np.arange(len(X_data), dtype="int32")
total_loss = 0.0
count = 0
with torch.no_grad():
for idx in eval_idx_list:
data_line = X_data[idx]
x, y = Variable(data_line[:-1]), Variable(data_line[1:])
if args.cuda:
x, y = x.cuda(), y.cuda()
output = model(x.unsqueeze(0)).squeeze(0)
loss = -torch.trace(torch.matmul(y, torch.log(output).float().t()) +
torch.matmul((1-y), torch.log(1-output).float().t()))
total_loss += loss.item()
count += output.size(0)
eval_loss = total_loss / count
print(name + " loss: {:.5f}".format(eval_loss))
return eval_loss
示例5: btrace
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def btrace(X):
# batch-trace: [B, N, N] -> [B]
n = X.size(-1)
X_ = X.view(-1, n, n)
tr = torch.zeros(X_.size(0)).to(X)
for i in range(tr.size(0)):
m = X_[i, :, :]
tr[i] = torch.trace(m)
return tr.view(*(X.size()[0:-2]))
示例6: torch_calculate_frechet_distance
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def torch_calculate_frechet_distance(mu1, sigma1, mu2, sigma2, eps=1e-6):
"""Pytorch implementation of the Frechet Distance.
Taken from https://github.com/bioinf-jku/TTUR
The Frechet distance between two multivariate Gaussians X_1 ~ N(mu_1, C_1)
and X_2 ~ N(mu_2, C_2) is
d^2 = ||mu_1 - mu_2||^2 + Tr(C_1 + C_2 - 2*sqrt(C_1*C_2)).
Stable version by Dougal J. Sutherland.
Params:
-- mu1 : Numpy array containing the activations of a layer of the
inception net (like returned by the function 'get_predictions')
for generated samples.
-- mu2 : The sample mean over activations, precalculated on an
representive data set.
-- sigma1: The covariance matrix over activations for generated samples.
-- sigma2: The covariance matrix over activations, precalculated on an
representive data set.
Returns:
-- : The Frechet Distance.
"""
assert mu1.shape == mu2.shape, \
'Training and test mean vectors have different lengths'
assert sigma1.shape == sigma2.shape, \
'Training and test covariances have different dimensions'
diff = mu1 - mu2
# Run 50 itrs of newton-schulz to get the matrix sqrt of sigma1 dot sigma2
covmean = sqrt_newton_schulz(sigma1.mm(sigma2).unsqueeze(0), 50).squeeze()
out = (diff.dot(diff) + torch.trace(sigma1) + torch.trace(sigma2)
- 2 * torch.trace(covmean))
return out
# Calculate Inception Score mean + std given softmax'd logits and number of splits
示例7: batch_mat2twist
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def batch_mat2twist(R):
""" The log map from SO3 to so3
Calculate the twist vector from Rotation matrix
Ethan Eade's lie group note:
http://ethaneade.com/lie.pdf equation (18)
@todo: may rename the interface to batch_so3logmap(R)
function tested in 'test_geometry.py'
@note: it currently does not consider extreme small values.
If you use it as training loss, you may run into problems
:input
:param Rotation matrix Bx3x3 \in \SO3 space
--------
:param the twist vector Bx3 \in \so3 space
"""
B = R.size()[0]
R1 = [torch.trace(R[i]) for i in range(R.size()[0])]
tr = torch.stack(R1)
theta = acos( ((tr - 1)/2).clamp(-1,1) )
r11,r12,r13,r21,r22,r23,r31,r32,r33 = torch.split(R.view(B,-1),1,dim=1)
res = torch.cat([r32-r23, r13-r31, r21-r12],dim=1)
magnitude = (0.5*theta/sin(theta))
return magnitude.view(B,1) * res
示例8: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def forward(self):
constrainted_matrix = self.select_param()
matrix_ = torch.squeeze(torch.squeeze(constrainted_matrix,dim=2),dim=2)
matrix_t = torch.t(matrix_)
matrixs = torch.mm(matrix_t,matrix_)
trace_ = torch.trace(torch.mm(matrixs,torch.inverse(matrixs)))
log_det = torch.logdet(matrixs)
maha_loss = trace_ - log_det
return maha_loss
示例9: trace
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def trace(self, a):
return torch.trace(a)
示例10: block_trace
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def block_trace(self, X, m, n):
blocks = []
for i in range(n):
blocks.append([])
for j in range(n):
block = self.trace(X[..., i*m:(i+1)*m, j*m:(j+1)*m])
blocks[-1].append(block)
return self.pack([
self.pack([
b for b in block
])
for block in blocks
])
示例11: normalize_factors
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def normalize_factors(A, B):
eps = 1e-10
trA = torch.trace(A) + eps
trB = torch.trace(B) + eps
assert trA > 0, 'Must PD. A not PD'
assert trB > 0, 'Must PD. B not PD'
return A * (trB/trA)**0.5, B * (trA/trB)**0.5
示例12: trace
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def trace(tensor: BKTensor) -> BKTensor:
new_real = torch.trace(tensor[0])
new_imag = torch.trace(tensor[1])
return torch.stack((new_real, new_imag))
示例13: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def forward(self, ypred, ytrue):
# geodesic loss between predicted and gt rotations
tmp = torch.stack([torch.trace(torch.mm(ypred[i].t(), ytrue[i])) for i in range(ytrue.size(0))])
angle = torch.acos(torch.clamp((tmp - 1.0) / 2, -1 + eps, 1 - eps))
return torch.mean(angle)
示例14: my_loss
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def my_loss(self, ypred, ytrue):
# geodesic loss between predicted and gt rotations
tmp = torch.stack([torch.trace(torch.mm(ypred[i].t(), ytrue[i])) for i in range(ytrue.size(0))])
angle = torch.acos(torch.clamp((tmp - 1.0) / 2, -1 + eps, 1 - eps))
return torch.mean(angle)
示例15: forward
# 需要導入模塊: import torch [as 別名]
# 或者: from torch import trace [as 別名]
def forward(self, adj_mat, l_mat):
t0 = F.leaky_relu(self.encode0(adj_mat))
t0 = F.leaky_relu(self.encode1(t0))
self.embedding = t0
t0 = F.leaky_relu(self.decode0(t0))
t0 = F.leaky_relu(self.decode1(t0))
L_1st = 2 * torch.trace(torch.mm(torch.mm(torch.t(self.embedding), l_mat), self.embedding))
L_2nd = torch.sum(((adj_mat - t0) * adj_mat * self.beta) * ((adj_mat - t0) * adj_mat * self.beta))
L_reg = 0
for param in self.parameters():
L_reg += self.nu1 * torch.sum(torch.abs(param)) + self.nu2 * torch.sum(param * param)
return self.alpha * L_1st, L_2nd, self.alpha * L_1st + L_2nd, L_reg