本文整理汇总了Python中torch.sum函数的典型用法代码示例。如果您正苦于以下问题:Python sum函数的具体用法?Python sum怎么用?Python sum使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sum函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _test_jacobian
def _test_jacobian(self, input_dim, hidden_dim):
jacobian = torch.zeros(input_dim, input_dim)
iaf = InverseAutoregressiveFlow(input_dim, hidden_dim, sigmoid_bias=0.5)
def nonzero(x):
return torch.sign(torch.abs(x))
x = torch.randn(1, input_dim)
iaf_x = iaf(x)
analytic_ldt = iaf.log_abs_det_jacobian(x, iaf_x).data.sum()
for j in range(input_dim):
for k in range(input_dim):
epsilon_vector = torch.zeros(1, input_dim)
epsilon_vector[0, j] = self.epsilon
iaf_x_eps = iaf(x + epsilon_vector)
delta = (iaf_x_eps - iaf_x) / self.epsilon
jacobian[j, k] = float(delta[0, k].data.sum())
permutation = iaf.arn.get_permutation()
permuted_jacobian = jacobian.clone()
for j in range(input_dim):
for k in range(input_dim):
permuted_jacobian[j, k] = jacobian[permutation[j], permutation[k]]
numeric_ldt = torch.sum(torch.log(torch.diag(permuted_jacobian)))
ldt_discrepancy = np.fabs(analytic_ldt - numeric_ldt)
diag_sum = torch.sum(torch.diag(nonzero(permuted_jacobian)))
lower_sum = torch.sum(torch.tril(nonzero(permuted_jacobian), diagonal=-1))
assert ldt_discrepancy < self.epsilon
assert diag_sum == float(input_dim)
assert lower_sum == float(0.0)
示例2: norm_flow
def norm_flow(self, params, z, v, logposterior):
h = F.tanh(params[0][0](z))
mew_ = params[0][1](h)
sig_ = F.sigmoid(params[0][2](h)+5.) #[PB,Z]
z_reshaped = z.view(self.P, self.B, self.z_size)
gradients = torch.autograd.grad(outputs=logposterior(z_reshaped), inputs=z_reshaped,
grad_outputs=self.grad_outputs,
create_graph=True, retain_graph=True, only_inputs=True)[0]
gradients = gradients.detach()
gradients = gradients.view(-1,self.z_size)
v = v*sig_ + mew_*gradients
logdet = torch.sum(torch.log(sig_), 1)
h = F.tanh(params[1][0](v))
mew_ = params[1][1](h)
sig_ = F.sigmoid(params[1][2](h)+5.) #[PB,Z]
z = z*sig_ + mew_*v
logdet2 = torch.sum(torch.log(sig_), 1)
#[PB]
logdet = logdet + logdet2
#[PB,Z], [PB]
return z, v, logdet
示例3: f1_score_macro
def f1_score_macro(y_true, y_pred, per_class=False, threshold=0.5):
'''
Macro f1
y_true: [bs, classes, x, y]
y_pred: [bs, classes, x, y]
Tested: same results as sklearn f1 macro
'''
y_true = y_true.byte()
y_pred = y_pred > threshold
y_true = y_true.permute(0, 2, 3, 1)
y_pred = y_pred.permute(0, 2, 3, 1)
y_true = y_true.contiguous().view(-1, y_true.size()[3]) # [bs*x*y, classes]
y_pred = y_pred.contiguous().view(-1, y_pred.size()[3])
f1s = []
for i in range(y_true.size()[1]):
intersect = torch.sum(y_true[:, i] * y_pred[:, i]) # works because all multiplied by 0 gets 0
denominator = torch.sum(y_true[:, i]) + torch.sum(y_pred[:, i]) # works because all multiplied by 0 gets 0
#maybe have to cast to float here (for python3 ??) otherwise always 0
# f1 = (2 * intersect) / (denominator + 1e-6)
f1 = (2 * intersect.float()) / (denominator.float() + 1e-6)
f1s.append(f1)
if per_class:
return np.array(f1s)
else:
return np.mean(np.array(f1s))
示例4: get_reinforce_ps_loss
def get_reinforce_ps_loss(phi, p0, reinforce = False):
# returns pseudoloss: loss whose gradient is unbiased for the
# true gradient
d = len(p0)
e_b = sigmoid(phi)
bn_rv = Bernoulli(probs = torch.ones(d) * e_b)
binary_samples = bn_rv.sample().detach()
# binary_samples = (torch.rand(d) > e_b).float().detach()
if reinforce:
binary_samples_ = bn_rv.sample().detach()
baseline = torch.sum((binary_samples_ - p0)**2)
else:
baseline = 0.0
sampled_loss = torch.sum((binary_samples - p0)**2)
# probs, draw_array = get_all_probs(e_b, d)
# losses_array = get_losses_from_draw_array(draw_array, p0)
#
# cat_rv = Categorical(probs)
# indx = cat_rv.sample()
# binary_samples = draw_array[indx]
# sampled_loss = losses_array[indx]
#
sampled_log_q = get_bernoulli_log_prob(e_b, binary_samples)
ps_loss = (sampled_loss - baseline).detach() * sampled_log_q
return ps_loss
开发者ID:Runjing-Liu120,项目名称:discrete_vae_experimentation,代码行数:33,代码来源:bernoulli_experiments_lib_deleteme.py
示例5: iou
def iou(pr, gt, eps=1e-7, threshold=None, activation='sigmoid'):
"""
Source:
https://github.com/catalyst-team/catalyst/
Args:
pr (torch.Tensor): A list of predicted elements
gt (torch.Tensor): A list of elements that are to be predicted
eps (float): epsilon to avoid zero division
threshold: threshold for outputs binarization
Returns:
float: IoU (Jaccard) score
"""
if activation is None or activation == "none":
activation_fn = lambda x: x
elif activation == "sigmoid":
activation_fn = torch.nn.Sigmoid()
elif activation == "softmax2d":
activation_fn = torch.nn.Softmax2d()
else:
raise NotImplementedError(
"Activation implemented for sigmoid and softmax2d"
)
pr = activation_fn(pr)
if threshold is not None:
pr = (pr > threshold).float()
intersection = torch.sum(gt * pr)
union = torch.sum(gt) + torch.sum(pr) - intersection + eps
return (intersection + eps) / union
示例6: calculate_variance_term
def calculate_variance_term(pred, gt, means, n_objects, delta_v, norm=2):
"""pred: bs, height * width, n_filters
gt: bs, height * width, n_instances
means: bs, n_instances, n_filters"""
bs, n_loc, n_filters = pred.size()
n_instances = gt.size(2)
# bs, n_loc, n_instances, n_filters
means = means.unsqueeze(1).expand(bs, n_loc, n_instances, n_filters)
# bs, n_loc, n_instances, n_filters
pred = pred.unsqueeze(2).expand(bs, n_loc, n_instances, n_filters)
# bs, n_loc, n_instances, n_filters
gt = gt.unsqueeze(3).expand(bs, n_loc, n_instances, n_filters)
_var = (torch.clamp(torch.norm((pred - means), norm, 3) -
delta_v, min=0.0) ** 2) * gt[:, :, :, 0]
var_term = 0.0
for i in range(bs):
_var_sample = _var[i, :, :n_objects[i]] # n_loc, n_objects
_gt_sample = gt[i, :, :n_objects[i], 0] # n_loc, n_objects
var_term += torch.sum(_var_sample) / torch.sum(_gt_sample)
var_term = var_term / bs
return var_term
示例7: forward
def forward(self, true_binary, rule_masks, raw_logits):
if cmd_args.loss_type == 'binary':
exp_pred = torch.exp(raw_logits) * rule_masks
norm = F.torch.sum(exp_pred, 2, keepdim=True)
prob = F.torch.div(exp_pred, norm)
return F.binary_cross_entropy(prob, true_binary) * cmd_args.max_decode_steps
if cmd_args.loss_type == 'perplexity':
return my_perp_loss(true_binary, rule_masks, raw_logits)
if cmd_args.loss_type == 'vanilla':
exp_pred = torch.exp(raw_logits) * rule_masks + 1e-30
norm = torch.sum(exp_pred, 2, keepdim=True)
prob = torch.div(exp_pred, norm)
ll = F.torch.abs(F.torch.sum( true_binary * prob, 2))
mask = 1 - rule_masks[:, :, -1]
logll = mask * F.torch.log(ll)
loss = -torch.sum(logll) / true_binary.size()[1]
return loss
print('unknown loss type %s' % cmd_args.loss_type)
raise NotImplementedError
示例8: reverse_flow
def reverse_flow(self, z):
B = z.shape[0]
C = z.shape[1]
f = self.flows
logdet = 0.
reverse_ = list(range(self.n_flows))[::-1]
for i in reverse_:
z1 = z[:,:C//2]
z2 = z[:,C//2:]
sig1 = torch.sigmoid(f[str(i)]['f2_sig'](z1))
mu1 = f[str(i)]['f2_mu'](z1)
z2 = (z2 - mu1) / sig1
sig2 = torch.sigmoid(f[str(i)]['f1_sig'](z2))
mu2 = f[str(i)]['f1_mu'](z2)
z1 = (z1 - mu2) / sig2
z = torch.cat([z1,z2],1)
z = z[:,f[str(i)]['inv_perm']]
sig1 = sig1.view(B, -1)
sig2 = sig2.view(B, -1)
logdet += torch.sum(torch.log(sig1), 1)
logdet += torch.sum(torch.log(sig2), 1)
return z, logdet
示例9: forward_flow
def forward_flow(self, z, xenc):
B = z.shape[0]
C = z.shape[1]
f = self.flows
logdet = 0.
for i in range(self.n_flows):
z = z[:,f[str(i)]['perm']]
z1 = z[:,:C//2]
z2 = z[:,C//2:]
sig2 = torch.sigmoid(f[str(i)]['f1_sig'](torch.cat([z2,xenc],1)))
mu2 = f[str(i)]['f1_mu'](torch.cat([z2,xenc],1))
z1 = z1*sig2 + mu2
mu1 = f[str(i)]['f2_mu'](torch.cat([z1,xenc],1))
sig1 = torch.sigmoid(f[str(i)]['f2_sig'](torch.cat([z1,xenc],1)))
z2 = z2*sig1 + mu1
z = torch.cat([z1,z2],1)
sig1 = sig1.view(B, -1)
sig2 = sig2.view(B, -1)
logdet += torch.sum(torch.log(sig1), 1)
logdet += torch.sum(torch.log(sig2), 1)
return z, logdet
示例10: test_fun_weak
def test_fun_weak(model,loss_fn,dataloader,dataloader_neg,batch_tnf,use_cuda=True,triplet=False,tps_grid_regularity_loss=0):
model.eval()
test_loss = 0
if dataloader_neg is not None:
dataloader_neg_iter=iter(dataloader_neg)
for batch_idx, batch in enumerate(dataloader):
batch = batch_tnf(batch)
if dataloader_neg is not None:
batch_neg = next(dataloader_neg_iter)
batch_neg = batch_tnf(batch_neg)
theta_pos,corr_pos,theta_neg,corr_neg = model(batch, batch_neg)
inliers_pos = loss_fn(theta_pos,corr_pos)
inliers_neg = loss_fn(theta_neg,corr_neg)
loss = torch.sum(inliers_neg - inliers_pos)
elif dataloader_neg is None and triplet==False:
theta,corr = model(batch)
loss = loss_fn(theta,corr)
elif dataloader_neg is None and triplet==True:
theta_pos,corr_pos,theta_neg,corr_neg = model(batch, triplet=True)
inliers_pos = loss_fn(theta_pos,corr_pos)
inliers_neg = loss_fn(theta_neg,corr_neg)
loss = torch.sum(inliers_neg - inliers_pos)
test_loss += loss.data.cpu().numpy()[0]
test_loss /= len(dataloader)
print('Test set: Average loss: {:.4f}'.format(test_loss))
return test_loss
示例11: neg_hartmann6
def neg_hartmann6(X: Tensor) -> Tensor:
r"""Negative Hartmann6 test function.
Six-dimensional function (typically evaluated on `[0, 1]^6`)
`H(x) = - sum_{i=1}^4 ALPHA_i exp( - sum_{j=1}^6 A_ij (x_j - P_ij)**2 )`
H has a 6 local minima and a global minimum at
`z = (0.20169, 0.150011, 0.476874, 0.275332, 0.311652, 0.6573)`
with `H(z) = -3.32237`
Args:
X: A Tensor of size `6` or `k x 6` (k batch evaluations).
Returns:
`-H(X)`, the negative value of the standard Hartmann6 function.
"""
batch = X.ndimension() > 1
X = X if batch else X.unsqueeze(0)
inner_sum = torch.sum(X.new(A) * (X.unsqueeze(1) - 0.0001 * X.new(P)) ** 2, dim=2)
H = -torch.sum(X.new(ALPHA) * torch.exp(-inner_sum), dim=1)
result = -H
return result if batch else result.squeeze(0)
示例12: accGradParameters
def accGradParameters(self, input, gradOutput, scale=1):
assert input.dim() == 2
inputSize = self.weight.size(1)
outputSize = self.weight.size(0)
"""
dy_j x_i w_ji
----- = ------------------- - y_j -----------
dw_ji || w_j || * || x || || w_j ||^2
"""
if self._weight is None:
self._weight = self.weight.new()
if self._sum is None:
self._sum = input.new()
self._weight.resize_as_(self.weight).copy_(self.weight)
if self._gradOutput is None:
self._gradOutput = gradOutput.new()
self._gradOutput.resize_as_(gradOutput).copy_(gradOutput)
self._gradOutput.mul_(self.output)
torch.sum(self._gradOutput, 0, out=self._sum, keepdim=True)
grad = self._sum[0]
grad.div_(self._weightNorm.select(1, 0))
self._weight.mul_(grad.view(outputSize, 1).expand_as(self._weight))
input_ = self._gradOutput
input_.resize_as_(input).copy_(input)
input_.div_(self._inputNorm.expand_as(input))
self._weight.addmm_(-1, 1, gradOutput.t(), input_)
self._weight.div_(self._weightNorm.expand_as(self._weight))
self.gradWeight.add_(self._weight)
示例13: _mmd2
def _mmd2(K_XX, K_XY, K_YY, const_diagonal=False, biased=False):
m = K_XX.size(0) # assume X, Y are same shape
# Get the various sums of kernels that we'll use
# Kts drop the diagonal, but we don't need to compute them explicitly
if const_diagonal is not False:
diag_X = diag_Y = const_diagonal
sum_diag_X = sum_diag_Y = m * const_diagonal
else:
diag_X = torch.diag(K_XX) # (m,)
diag_Y = torch.diag(K_YY) # (m,)
sum_diag_X = torch.sum(diag_X)
sum_diag_Y = torch.sum(diag_Y)
Kt_XX_sums = K_XX.sum(dim=1) - diag_X # \tilde{K}_XX * e = K_XX * e - diag_X
Kt_YY_sums = K_YY.sum(dim=1) - diag_Y # \tilde{K}_YY * e = K_YY * e - diag_Y
K_XY_sums_0 = K_XY.sum(dim=0) # K_{XY}^T * e
Kt_XX_sum = Kt_XX_sums.sum() # e^T * \tilde{K}_XX * e
Kt_YY_sum = Kt_YY_sums.sum() # e^T * \tilde{K}_YY * e
K_XY_sum = K_XY_sums_0.sum() # e^T * K_{XY} * e
if biased:
mmd2 = ((Kt_XX_sum + sum_diag_X) / (m * m)
+ (Kt_YY_sum + sum_diag_Y) / (m * m)
- 2.0 * K_XY_sum / (m * m))
else:
mmd2 = (Kt_XX_sum / (m * (m - 1))
+ Kt_YY_sum / (m * (m - 1))
- 2.0 * K_XY_sum / (m * m))
return mmd2
示例14: _get_state_cost
def _get_state_cost(self, worlds: List[WikiTablesWorld], state: CoverageState) -> torch.Tensor:
if not state.is_finished():
raise RuntimeError("_get_state_cost() is not defined for unfinished states!")
world = worlds[state.batch_indices[0]]
# Our checklist cost is a sum of squared error from where we want to be, making sure we
# take into account the mask. We clamp the lower limit of the balance at 0 to avoid
# penalizing agenda actions produced multiple times.
checklist_balance = torch.clamp(state.checklist_state[0].get_balance(), min=0.0)
checklist_cost = torch.sum((checklist_balance) ** 2)
# This is the number of items on the agenda that we want to see in the decoded sequence.
# We use this as the denotation cost if the path is incorrect.
denotation_cost = torch.sum(state.checklist_state[0].checklist_target.float())
checklist_cost = self._checklist_cost_weight * checklist_cost
action_history = state.action_history[0]
batch_index = state.batch_indices[0]
action_strings = [state.possible_actions[batch_index][i][0] for i in action_history]
logical_form = world.get_logical_form(action_strings)
lisp_string = state.extras[batch_index]
if self._executor.evaluate_logical_form(logical_form, lisp_string):
cost = checklist_cost
else:
cost = checklist_cost + (1 - self._checklist_cost_weight) * denotation_cost
return cost
示例15: sample_from_discretized_mix_logistic_1d
def sample_from_discretized_mix_logistic_1d(l, nr_mix):
# Pytorch ordering
l = l.permute(0, 2, 3, 1)
ls = [int(y) for y in l.size()]
xs = ls[:-1] + [1] #[3]
# unpack parameters
logit_probs = l[:, :, :, :nr_mix]
l = l[:, :, :, nr_mix:].contiguous().view(xs + [nr_mix * 2]) # for mean, scale
# sample mixture indicator from softmax
temp = torch.FloatTensor(logit_probs.size())
if l.is_cuda : temp = temp.cuda()
temp.uniform_(1e-5, 1. - 1e-5)
temp = logit_probs.data - torch.log(- torch.log(temp))
_, argmax = temp.max(dim=3)
one_hot = to_one_hot(argmax, nr_mix)
sel = one_hot.view(xs[:-1] + [1, nr_mix])
# select logistic parameters
means = torch.sum(l[:, :, :, :, :nr_mix] * sel, dim=4)
log_scales = torch.clamp(torch.sum(
l[:, :, :, :, nr_mix:2 * nr_mix] * sel, dim=4), min=-7.)
u = torch.FloatTensor(means.size())
if l.is_cuda : u = u.cuda()
u.uniform_(1e-5, 1. - 1e-5)
u = Variable(u)
x = means + torch.exp(log_scales) * (torch.log(u) - torch.log(1. - u))
x0 = torch.clamp(torch.clamp(x[:, :, :, 0], min=-1.), max=1.)
out = x0.unsqueeze(1)
return out