本文整理汇总了Python中theano.tensor.tril函数的典型用法代码示例。如果您正苦于以下问题:Python tril函数的具体用法?Python tril怎么用?Python tril使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了tril函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
def __init__(self, rng, input1, input2, n_in1, n_in2, n_hidden_layers, d_hidden, W1=None, W2=None):
self.input1 = input1
self.input2 = input2
CouplingFunc = WarpNetwork(rng, input1, n_hidden_layers, d_hidden, n_in1, n_in2)
if W1 is None:
bin = numpy.sqrt(6. / (n_in1 + n_in1))
W1_values = numpy.identity(n_in1, dtype=theano.config.floatX)
W1 = theano.shared(value=W1_values, name='W1')
if W2 is None:
bin = numpy.sqrt(6. / (n_in2 + n_in2))
W2_values = numpy.identity(n_in2, dtype=theano.config.floatX)
W2 = theano.shared(value=W2_values, name='W2')
V1u = T.triu(W1)
V1l = T.tril(W1)
V1l = T.extra_ops.fill_diagonal(V1l, 1.)
V1 = T.dot(V1u, V1l)
V2u = T.triu(W2)
V2l = T.tril(W2)
V2l = T.extra_ops.fill_diagonal(V2l, 1.)
V2 = T.dot(V2u, V2l)
self.output1 = T.dot(input1, V1)
self.output2 = T.dot(input2, V2) + CouplingFunc.output
self.log_jacobian = T.log(T.abs_(T.nlinalg.ExtractDiag()(V1u))).sum() \
+ T.log(T.abs_(T.nlinalg.ExtractDiag()(V2u))).sum()
self.params = CouplingFunc.params
示例2: lower_lower
def lower_lower(self):
'''Evaluates the intractable term in the lower bound which itself
must be lower bounded'''
a = self.get_aux_mult()
reversed_cum_probs = T.extra_ops.cumsum(a[:,::-1],1)
dot_prod_m = T.dot(reversed_cum_probs, self.digams_1p2)
dot_prod_mp1 = T.dot(T.concatenate((reversed_cum_probs[:,1:],T.zeros((self.K,1))),1), self.digams[:,0])
# final entropy term
triu_ones = T.triu(T.ones_like(a)) - T.eye(self.K)
aloga = T.sum(T.tril(a)*T.log(T.tril(a)+triu_ones),1)
return T.dot(a, self.digams[:,1]) + dot_prod_m + dot_prod_mp1 - aloga
示例3: grad
def grad(self, inputs, output_gradients):
"""
Reverse-mode gradient updates for matrix solve operation c = A \ b.
Symbolic expression for updates taken from [1]_.
References
----------
..[1] M. B. Giles, "An extended collection of matrix derivative results
for forward and reverse mode automatic differentiation",
http://eprints.maths.ox.ac.uk/1079/
"""
A, b = inputs
c = self(A, b)
c_bar = output_gradients[0]
trans_map = {
'lower_triangular': 'upper_triangular',
'upper_triangular': 'lower_triangular'
}
trans_solve_op = Solve(
# update A_structure and lower to account for a transpose operation
A_structure=trans_map.get(self.A_structure, self.A_structure),
lower=not self.lower
)
b_bar = trans_solve_op(A.T, c_bar)
# force outer product if vector second input
A_bar = -tensor.outer(b_bar, c) if c.ndim == 1 else -b_bar.dot(c.T)
if self.A_structure == 'lower_triangular':
A_bar = tensor.tril(A_bar)
elif self.A_structure == 'upper_triangular':
A_bar = tensor.triu(A_bar)
return [A_bar, b_bar]
示例4: logp
def logp(self, S):
l = 0.0
#add prior
pi = self.pi
#Get time 0 states
zeroIndices = np.roll(self.T.cumsum(),1)
zeroIndices[0] = 0
zeroIndices = zeroIndices.astype('int32')
l += TT.sum(TT.log(pi[S[zeroIndices]]))
#l += TT.sum(TT.log(pi[S[:,0]]))
#add likelihood
Q = self.Q
step_sizes = self.step_sizes
#import pdb; pdb.set_trace()
C = self.computeC(S)
n_step_sizes = len(self.step_sizes)
for i in range(0, n_step_sizes):
tau = step_sizes[i]
P = TT.slinalg.expm(tau*Q)
stabilizer = TT.tril(TT.alloc(0.0, *P.shape)+0.1, k=-1)
logP = TT.log(P + stabilizer)
#compute likelihood in terms of P(tau)
l += TT.sum(C[i,:,:]*logP)
return l
示例5: L_op
def L_op(self, inputs, outputs, gradients):
# Modified from theano/tensor/slinalg.py
# No handling for on_error = 'nan'
dz = gradients[0]
chol_x = outputs[0]
# this is for nan mode
#
# ok = ~tensor.any(tensor.isnan(chol_x))
# chol_x = tensor.switch(ok, chol_x, 1)
# dz = tensor.switch(ok, dz, 1)
# deal with upper triangular by converting to lower triangular
if not self.lower:
chol_x = chol_x.T
dz = dz.T
def tril_and_halve_diagonal(mtx):
"""Extracts lower triangle of square matrix and halves diagonal."""
return tensor.tril(mtx) - tensor.diag(tensor.diagonal(mtx) / 2.)
def conjugate_solve_triangular(outer, inner):
"""Computes L^{-T} P L^{-1} for lower-triangular L."""
return gpu_solve_upper_triangular(
outer.T, gpu_solve_upper_triangular(outer.T, inner.T).T)
s = conjugate_solve_triangular(
chol_x, tril_and_halve_diagonal(chol_x.T.dot(dz)))
if self.lower:
grad = tensor.tril(s + s.T) - tensor.diag(tensor.diagonal(s))
else:
grad = tensor.triu(s + s.T) - tensor.diag(tensor.diagonal(s))
return [grad]
示例6: log_prob
def log_prob(self, X, Y):
""" Evaluate the log-probability for the given samples.
Parameters
----------
Y: T.tensor
samples from the upper layer
X: T.tensor
samples from the lower layer
Returns
-------
log_p: T.tensor
log-probabilities for the samples in X and Y
"""
n_X, n_Y = self.get_hyper_params(['n_X', 'n_Y'])
b, W, U = self.get_model_params(['b', 'W', 'U'])
W = T.tril(W, k=-1)
prob_X = self.sigmoid(T.dot(X, W) + T.dot(Y, U) + T.shape_padleft(b))
log_prob = X*T.log(prob_X) + (1-X)*T.log(1-prob_X)
log_prob = T.sum(log_prob, axis=1)
return log_prob
示例7: rank_loss
def rank_loss(scores):
# Images
diag = T.diag(scores)
diff_img = scores - diag.dimshuffle(0, 'x') + 1
max_img = T.maximum(0, diff_img)
triu_img = T.triu(max_img, 1)
til_img = T.tril(max_img, -1)
res_img = T.sum(triu_img) + T.sum(til_img)
# Sentences
diff_sent = scores.T - diag.dimshuffle(0, 'x') + 1
max_sent = T.maximum(0, diff_sent)
triu_sent = T.triu(max_sent, 1)
til_sent = T.tril(max_sent, -1)
res_sent = T.sum(triu_sent) + T.sum(til_sent)
return T.log(T.sum(scores) + 0.01)
示例8: get_aux_mult
def get_aux_mult(self):
a_first_row_unnorm = (self.digams_1_cumsum - self.digams_1p2_cumsum + self.digams[:,1]).reshape((1,self.K))
a_first_row_unnorm_rep = t_repeat(a_first_row_unnorm, self.K, axis=0).reshape((self.K,self.K))
a = T.exp(a_first_row_unnorm_rep) * T.tril(T.ones((self.K, self.K)))
return a / T.sum(a, 1).reshape((self.K,1))
示例9: check_l
def check_l(m, k=0):
m_symb = T.matrix(dtype=m.dtype)
k_symb = T.iscalar()
f = theano.function([m_symb, k_symb],
T.tril(m_symb, k_symb),
mode=mode_with_gpu)
result = f(m, k)
assert np.allclose(result, np.tril(m, k))
assert result.dtype == np.dtype(dtype)
assert any([isinstance(node.op, GpuTri)
for node in f.maker.fgraph.toposort()])
示例10: grad
def grad(self, inputs, gradients):
"""
Cholesky decomposition reverse-mode gradient update.
Symbolic expression for reverse-mode Cholesky gradient taken from [0]_
References
----------
.. [0] I. Murray, "Differentiation of the Cholesky decomposition",
http://arxiv.org/abs/1602.07527
"""
x = inputs[0]
dz = gradients[0]
chol_x = self(x)
ok = tt.all(tt.nlinalg.diag(chol_x) > 0)
chol_x = tt.switch(ok, chol_x, tt.fill_diagonal(chol_x, 1))
dz = tt.switch(ok, dz, floatX(1))
# deal with upper triangular by converting to lower triangular
if not self.lower:
chol_x = chol_x.T
dz = dz.T
def tril_and_halve_diagonal(mtx):
"""Extracts lower triangle of square matrix and halves diagonal."""
return tt.tril(mtx) - tt.diag(tt.diagonal(mtx) / 2.)
def conjugate_solve_triangular(outer, inner):
"""Computes L^{-T} P L^{-1} for lower-triangular L."""
solve = tt.slinalg.Solve(A_structure="upper_triangular")
return solve(outer.T, solve(outer.T, inner.T).T)
s = conjugate_solve_triangular(
chol_x, tril_and_halve_diagonal(chol_x.T.dot(dz)))
if self.lower:
grad = tt.tril(s + s.T) - tt.diag(tt.diagonal(s))
else:
grad = tt.triu(s + s.T) - tt.diag(tt.diagonal(s))
return [tt.switch(ok, grad, floatX(np.nan))]
示例11: __init__
def __init__(self, weights_init, biases_init, lower=False,
weights_prec=0., biases_prec=0., weights_mean=None,
biases_mean=None):
assert weights_init.ndim == 2, 'weights_init must be 2D array.'
assert biases_init.ndim == 1, 'biases_init must be 1D array.'
assert weights_init.shape[0] == biases_init.shape[0], \
'Dimensions of weights_init and biases_init must be consistent.'
self.lower = lower
self.weights = th.shared(weights_init, name='W')
self.weights_tri = (tt.tril(self.weights)
if lower else tt.triu(self.weights))
self.biases = th.shared(biases_init, name='b')
self.weights_prec = weights_prec
self.biases_prec = biases_prec
if weights_mean is None:
weights_mean = np.eye(weights_init.shape[0])
if biases_mean is None:
biases_mean = np.zeros_like(biases_init)
self.weights_mean = (np.tril(weights_mean)
if lower else np.triu(weights_mean))
self.biases_mean = biases_mean
super(TriangularAffineLayer, self).__init__(
[self.weights, self.biases])
示例12: test_autoregressor
def test_autoregressor(dim=3, n_samples=5):
ar = AutoRegressor(dim)
ar.params['b'] += 0.1
tparams = ar.set_tparams()
X = T.matrix('X', dtype=floatX)
nlp = ar.neg_log_prob(X)
p = ar.get_prob(X, *ar.get_params())
W = T.tril(ar.W, k=-1)
z = T.dot(X, W) + ar.b
x = np.random.randint(0, 2, size=(n_samples, dim)).astype(floatX)
f = theano.function([X], [nlp, p, z, W])
nlp_t, p_t, z_t, W_t = f(x)
print x.shape, nlp_t.shape
z_np = np.zeros((n_samples, dim)).astype(floatX) + ar.params['b'][None, :]
for i in xrange(dim):
print i
for j in xrange(i + 1, dim):
print i, j
z_np[:, i] += ar.params['W'][j, i] * x[:, j]
assert np.allclose(z_t, z_np), (z_t, z_np)
p_np = sigmoid(z_np)
assert np.allclose(p_t, p_np, atol=1e-4), (p_t - p_np)
p_np = np.clip(p_np, 1e-7, 1 - 1e-7)
nlp_np = (- x * np.log(p_np) - (1 - x) * np.log(1 - p_np)).sum(axis=1)
assert np.allclose(nlp_t, nlp_np, atol=1e-3), (nlp_t - nlp_np)
samples, updates = ar.sample(n_samples=n_samples)
f = theano.function([], samples, updates=updates)
print f()
示例13: step_neg_log_prob
def step_neg_log_prob(self, x, c, War, bar):
W = T.tril(War, k=-1)
p = T.nnet.sigmoid(T.dot(x, W) + bar + c)
return self.f_neg_log_prob(x, p)
示例14: neg_log_prob
def neg_log_prob(self, x, c):
W = T.tril(self.War, k=-1)
p = T.nnet.sigmoid(T.dot(x, W) + self.bar + c)
return self.f_neg_log_prob(x, p)
示例15: __init__
def __init__(self, params,correct,Xinfo, samples = 500,batch_size=None):
ker = kernel()
mmd = MMD()
self.samples = samples
self.params = params
self.batch_size=batch_size
self.Xlabel_value=Xinfo["Xlabel_value"]
self.Weight_value=Xinfo["Weight_value"]
#データの保存ファイル
model_file_name = 'model_MMD_kernel' + '.save'
#もしこれまでに作ったのがあるならロードする
try:
print ('Trying to load model...')
with open(model_file_name, 'rb') as file_handle:
obj = pickle.load(file_handle)
self.f, self.g= obj
print ('Loaded!')
return
except:
print ('Failed. Creating a new model...')
X,Y,X_test,m,S_b,mu,Sigma_b,Z,eps_NQ,eps_M =\
T.dmatrices('X','Y','X_test','m','S_b','mu','Sigma_b','Z','eps_NQ','eps_M')
Xlabel=T.dmatrix('Xlabel')
Zlabel=T.dmatrix('Zlabel')
Zlabel_T=T.exp(Zlabel)/T.sum(T.exp(Zlabel),1)[:,None]#ラベルは確率なので正の値でかつ、企画化されている
Weight=T.dmatrix('Weight')
lhyp = T.dvector('lhyp')
ls=T.dvector('ls')
ga=T.dvector('ga')
(M, D), N, Q = Z.shape, X.shape[0], X.shape[1]
#変数の正の値への制約条件
beta = T.exp(ls)
gamma=T.exp(ga[0])
#beta=T.exp(lhyp[0])
sf2, l = T.exp(lhyp[0]), T.exp(lhyp[1:1+Q])
S=T.exp(S_b)
#Sigma=T.exp(self.Sigma_b)
#xについてはルートを取らなくても対角行列なので問題なし
#uについては対角でないのでコレスキー分解するとかして三角行列を作る必要がある
Sigma = T.tril(Sigma_b - T.diag(T.diag(Sigma_b)) + T.diag(T.exp(T.diag(Sigma_b))))
#スケール変換
mu_scaled, Sigma_scaled = sf2**0.5 * mu, sf2**0.5 * Sigma
Xtilda = m + S * eps_NQ
U = mu_scaled+Sigma_scaled.dot(eps_M)
print ('Setting up cache...')
Kmm = ker.RBF(sf2, l, Z)
Kmm=mmd.MMD_kenel_Xonly(gamma,Zlabel_T,Kmm,Weight)
KmmInv = sT.matrix_inverse(Kmm)
#KmmDet=theano.sandbox.linalg.det(Kmm)
#KmmInv_cache = sT.matrix_inverse(Kmm)
#self.fKmm = theano.function([Z, lhyp], Kmm, name='Kmm')
#self.f_KmmInv = theano.function([Z, lhyp], KmmInv_cache, name='KmmInv_cache')
#復習:これは員数をZ,lhypとした関数kmmInv_cacheをコンパイルしている。つまり逆行列はzとハイパーパラメタの関数になった
#self.update_KmmInv_cache()#実際に数値を入れてkinnvを計算させている
#逆行列の微分関数を作っている
#self.dKmm_d = {'Z': theano.function([Z, lhyp], T.jacobian(Kmm.flatten(), Z), name='dKmm_dZ'),
# 'lhyp': theano.function([Z, lhyp], T.jacobian(Kmm.flatten(), lhyp), name='dKmm_dlhyp')}
print ('Modeling...')
Kmn = ker.RBF(sf2,l,Z,Xtilda)
Kmn=mmd.MMD_kenel_ZX(gamma,Zlabel_T,Xlabel,Kmn,Weight)
Knn = ker.RBF(sf2,l,Xtilda,Xtilda)
Knn=mmd.MMD_kenel_Xonly(gamma,Xlabel,Knn,Weight)
Ktilda=Knn-T.dot(Kmn.T,T.dot(KmmInv,Kmn))
Kinterval=T.dot(KmmInv,Kmn)
mean_U=T.dot(Kinterval.T,U)
betaI=T.diag(T.dot(Xlabel,beta))
Covariance = betaI
LL = (self.log_mvn(X, mean_U, Covariance) - 0.5*T.sum(T.dot(betaI,Ktilda)))*correct
KL_X = -self.KLD_X(m,S)*correct
KL_U = -self.KLD_U(mu_scaled , Sigma_scaled , Kmm,KmmInv)
print ('Compiling model ...')
inputs = {'X': X, 'Z': Z, 'm': m, 'S_b': S_b, 'mu': mu, 'Sigma_b': Sigma_b, 'lhyp': lhyp, 'ls': ls,
#.........这里部分代码省略.........