本文整理汇总了Python中theano.tensor.tensordot函数的典型用法代码示例。如果您正苦于以下问题:Python tensordot函数的具体用法?Python tensordot怎么用?Python tensordot使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了tensordot函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: marginalize_over_v_z
def marginalize_over_v_z(self, h):
# energy = \sum_{i=1}^{|h|} h_i*b_i - \beta * ln(1 + e^{b_i})
# In theory should use the following line
# energy = (h * self.b).T
# However, when there is broadcasting, the Theano element-wise multiplication between np.NaN and 0 is 0 instead of np.NaN!
# so we use T.tensordot and T.diagonal instead as a workaround!
# See Theano issue #3848 (https://github.com/Theano/Theano/issues/3848)
energy = T.tensordot(h, self.b, axes=0)
energy = T.diagonal(energy, axis1=1, axis2=2).T
if self.penalty == "softplus_bi":
energy = energy - self.beta * T.log(1 + T.exp(self.b))[:, None]
elif self.penalty == "softplus0":
energy = energy - self.beta * T.log(1 + T.exp(0))[:, None]
else:
raise NameError("Invalid penalty term")
energy = T.set_subtensor(energy[(T.isnan(energy)).nonzero()], 0) # Remove NaN
energy = T.sum(energy, axis=0, keepdims=True).T
ener = T.tensordot(h, self.W, axes=0)
ener = T.diagonal(ener, axis1=1, axis2=2)
ener = T.set_subtensor(ener[(T.isnan(ener)).nonzero()], 0)
ener = T.sum(ener, axis=2) + self.c[None, :]
ener = T.sum(T.log(1 + T.exp(ener)), axis=1, keepdims=True)
return -(energy + ener)
示例2: test_tensordot_reshape
def test_tensordot_reshape():
'''Test that the tensordot implementation using dimshuffle, reshape and dot
gives the same results as the default (numpy) version'''
# define some tensors
a = numpy.arange(20, dtype=theano.config.floatX) / 20.0
b = numpy.arange(10, dtype=theano.config.floatX) / 10.0
c = numpy.arange(5, dtype=theano.config.floatX) / 5.0
d = numpy.arange(8, dtype=theano.config.floatX) / 8.0
tensor1 = numpy.tensordot(a, numpy.tensordot(b, numpy.tensordot(c, d, 0), 0), 0)
tensor2 = numpy.tensordot(c, numpy.tensordot(d, a, 0), 0)
tensor3 = tensor2.swapaxes(1, 2).swapaxes(0, 2) # d, a, c
x = T.tensor4('x')
y = T.tensor3('y')
# case 1: number of axes to sum over
default1 = theano.function([x,y], T.tensordot(x, y, 2))(tensor1, tensor2)
reshape1 = theano.function([x,y], B.tensordot(x, y, 2))(tensor1, tensor2)
assert numpy.allclose(default1, reshape1)
# case 2: axis pairs
default2 = theano.function([x,y], T.tensordot(x, y, axes=[(0, 3), (1, 0)]))(tensor1, tensor3)
reshape2 = theano.function([x,y], B.tensordot(x, y, axes=[(0, 3), (1, 0)]))(tensor1, tensor3)
assert numpy.allclose(default2, reshape2)
default3 = theano.function([x,y], T.tensordot(x, y, axes=[(0, 3, 2), (1, 0, 2)]))(tensor1, tensor3)
reshape3 = theano.function([x,y], B.tensordot(x, y, axes=[(0, 3, 2), (1, 0, 2)]))(tensor1, tensor3)
assert numpy.allclose(default3, reshape3)
示例3: sym_mask_logdensity_estimator_intermediate
def sym_mask_logdensity_estimator_intermediate(self, x, mask):
non_linearity_name = self.parameters["nonlinearity"].get_name()
assert non_linearity_name == "sigmoid" or non_linearity_name == "RLU"
x = x.T # BxD
mask = mask.T # BxD
output_mask = constantX(1) - mask # BxD
D = constantX(self.n_visible)
d = mask.sum(1) # d is the 1-based index of the dimension whose value to infer (not the size of the context)
masked_input = x * mask # BxD
h = self.nonlinearity(T.dot(masked_input, self.W1) + T.dot(mask, self.Wflags) + self.b1) # BxH
for l in xrange(self.n_layers - 1):
h = self.nonlinearity(T.dot(h, self.Ws[l]) + self.bs[l]) # BxH
z_alpha = T.tensordot(h, self.V_alpha, [[1], [1]]) + T.shape_padleft(self.b_alpha)
z_mu = T.tensordot(h, self.V_mu, [[1], [1]]) + T.shape_padleft(self.b_mu)
z_sigma = T.tensordot(h, self.V_sigma, [[1], [1]]) + T.shape_padleft(self.b_sigma)
temp = T.exp(z_alpha) # + 1e-6
# temp += T.shape_padright(temp.sum(2)/1e-3)
Alpha = temp / T.shape_padright(temp.sum(2)) # BxDxC
Mu = z_mu # BxDxC
Sigma = T.exp(z_sigma) # + 1e-6 #BxDxC
# Alpha = Alpha * T.shape_padright(output_mask) + T.shape_padright(mask)
# Mu = Mu * T.shape_padright(output_mask)
# Sigma = Sigma * T.shape_padright(output_mask) + T.shape_padright(mask)
# Phi = -constantX(0.5) * T.sqr((Mu - T.shape_padright(x*output_mask)) / Sigma) - T.log(Sigma) - constantX(0.5 * np.log(2*np.pi)) #BxDxC
Phi = (
-constantX(0.5) * T.sqr((Mu - T.shape_padright(x)) / Sigma)
- T.log(Sigma)
- constantX(0.5 * np.log(2 * np.pi))
) # BxDxC
logdensity = (log_sum_exp(Phi + T.log(Alpha), axis=2) * output_mask).sum(1) * D / (D - d)
return (logdensity, z_alpha, z_mu, z_sigma, Alpha, Mu, Sigma, h)
示例4: get_output
def get_output(self, train=False):
input = self.get_input(train)
proj_input = self.activation(T.tensordot(input, self.att_proj, axes=(3,0)))
#else:
# proj_fun = lambda proj_i, inp: T.tensordot(inp, proj_i, axes=((1,3), (0,1)))
# lin_proj_input, _ = theano.scan(fn=proj_fun, sequences=self.att_proj, non_sequences=input)
# proj_input = self.activation(lin_proj_input.dimshuffle((1,0,2,3)))
if self.context == 'word':
att_scores = T.tensordot(proj_input, self.att_scorer, axes=(3, 0))
elif self.context == 'clause':
#att_scores = T.tensordot(proj_input, self.att_scorer, axes=(3, 1)).sum(axis=2)
def step(a_t, h_tm1, W_in, W, sc):
h_t = T.tanh(T.tensordot(a_t, W_in, axes=(2,0)) + T.tensordot(h_tm1, W, axes=(2,0)))
s_t = T.tensordot(h_t, sc, axes=(2,0))
return h_t, s_t
[_, scores], _ = theano.scan(step, sequences=[proj_input.dimshuffle(2,0,1,3)], outputs_info=[T.zeros((proj_input.shape[0], self.td1, self.rec_hid_dim)), None], non_sequences=[self.rec_in_weights, self.rec_hid_weights, self.att_scorer])
att_scores = scores.dimshuffle(1,2,0)
elif self.context == 'para':
att_scores = T.tensordot(proj_input, self.att_scorer, axes=(3, 2)).sum(axis=(1, 2))
# Nested scans. For shame!
def get_sample_att(sample_input, sample_att):
sample_att_inp, _ = theano.scan(fn=lambda s_att_i, s_input_i: T.dot(s_att_i, s_input_i), sequences=[T.nnet.softmax(sample_att), sample_input])
return sample_att_inp
att_input, _ = theano.scan(fn=get_sample_att, sequences=[input, att_scores])
return att_input
示例5: test_transfer
def test_transfer(self):
tensor1 = self.rng.rand(20, 10, 5, 8).astype("float32")
tensor2 = self.rng.rand(5, 8, 20).astype("float32")
tensor3 = self.rng.rand(8, 20, 5).astype("float32")
x = tensor.ftensor4("x")
y = tensor.ftensor3("y")
tdot1 = tensor.tensordot(x, y, 2)
f1 = theano.function([x, y], tdot1, mode=mode_with_gpu)
topo1 = f1.maker.fgraph.toposort()
assert topo1[-1].op == cuda.host_from_gpu
# Let DebugMode debug
f1(tensor1, tensor2)
tdot2 = tensor.tensordot(x, y, axes=[(0, 3), (1, 0)])
f2 = theano.function([x, y], tdot2, mode=mode_with_gpu)
topo2 = f2.maker.fgraph.toposort()
assert topo2[-1].op == cuda.host_from_gpu
f2(tensor1, tensor3)
tdot3 = tensor.tensordot(x, y, axes=[(0, 3, 2), (1, 0, 2)])
f3 = theano.function([x, y], tdot3, mode=mode_with_gpu)
topo3 = f3.maker.fgraph.toposort()
assert topo3[-1].op == cuda.host_from_gpu
f3(tensor1, tensor3)
示例6: shade
def shade(self, shape, lights, camera):
# See: http://en.wikipedia.org/wiki/Phong_reflection_model#Description
# Since our material params are 1d we calculate bw shadings first and
# convert to color after
light = lights[0]
material = shape.material
normals = shape.normals(camera.rays)
ambient_light = material.ka
# diffuse (lambertian)
diffuse_shadings = material.kd*T.tensordot(normals, -light.normed_dir(), 1)
# specular
rm = 2.0*(T.tensordot(normals, -light.normed_dir(), 1).dimshuffle(
0, 1, 'x'))*normals + light.normed_dir()
specular_shadings = material.ks*(T.tensordot(rm, camera.look_at, 1) ** material.shininess)
# phong
phong_shadings = ambient_light + diffuse_shadings + specular_shadings
colorized = phong_shadings.dimshuffle(0, 1, 'x') * material.color.dimshuffle('x', 'x', 0) * light.intensity.dimshuffle('x', 'x', 0)
clipped = T.clip(colorized, 0, 1)
distances = shape.distance(camera.rays)
return broadcasted_switch(T.isinf(distances), [0., 0., 0.], clipped)
示例7: sym_masked_neg_loglikelihood_gradient
def sym_masked_neg_loglikelihood_gradient(self, x, mask):
""" x is a matrix of column datapoints (DxB) D = n_visible, Bfloat = batch size """
logdensity, z_alpha, z_mu, z_sigma, Alpha, Mu, Sigma, h = self.sym_mask_logdensity_estimator_intermediate(
x, mask
)
# nnz = output_mask.sum(0)
# sparsity_multiplier = T.shape_padright(T.shape_padleft((B+1e-6)/(nnz+1e-6)))
# wPhi = T.maximum(Phi + T.log(Alpha), constantX(-100.0)) #BxDxC
# lp_current = log_sum_exp(wPhi, axis = 2) * output_mask #BxD
# lp_current_sum = (lp_current.sum(1) * D / (D-d)).sum() #1
loglikelihood = logdensity.mean(dtype=floatX)
loss = -loglikelihood
dp_dz_alpha = T.grad(loss, z_alpha) # BxDxC
gb_alpha = dp_dz_alpha.sum(0) # DxC
gV_alpha = T.tensordot(h.T, dp_dz_alpha, [[1], [0]]).dimshuffle((1, 0, 2)) # DxHxC
dp_dz_mu = T.grad(loss, z_mu) # BxDxC
dp_dz_mu = dp_dz_mu * Sigma # Heuristic
gb_mu = dp_dz_mu.sum(0) # DxC
gV_mu = T.tensordot(h.T, dp_dz_mu, [[1], [0]]).dimshuffle((1, 0, 2)) # DxHxC
dp_dz_sigma = T.grad(loss, z_sigma) # BxDxC
gb_sigma = dp_dz_sigma.sum(0) # DxC
gV_sigma = T.tensordot(h.T, dp_dz_sigma, [[1], [0]]).dimshuffle((1, 0, 2)) # DxHxC
if self.n_layers > 1:
gWs, gbs, gW1, gWflags, gb1 = T.grad(loss, [self.Ws, self.bs, self.W1, self.Wflags, self.b1])
gradients = {
"V_alpha": gV_alpha,
"b_alpha": gb_alpha,
"V_mu": gV_mu,
"b_mu": gb_mu,
"V_sigma": gV_sigma,
"b_sigma": gb_sigma,
"Ws": gWs,
"bs": gbs,
"W1": gW1,
"b1": gb1,
"Wflags": gWflags,
}
else:
gW1, gWflags, gb1 = T.grad(loss, [self.W1, self.Wflags, self.b1])
gradients = {
"V_alpha": gV_alpha,
"b_alpha": gb_alpha,
"V_mu": gV_mu,
"b_mu": gb_mu,
"V_sigma": gV_sigma,
"b_sigma": gb_sigma,
"W1": gW1,
"b1": gb1,
"Wflags": gWflags,
}
# Gradients
return (loss, gradients)
示例8: output
def output(self, input_vectors):
"""
Calculate the n_output dot product scalars of this layer
@param input_vectors: n_input vectors (actual shape should be (n_batch, n_input, n_dimension)
"""
return T.sum(T.tensordot(input_vectors, self.W1, [[1], [0]]) *
T.tensordot(input_vectors, self.W2, [[1], [0]]), axis=1)
示例9: output
def output(self, train):
X = self.get_input(train)
X = X.dimshuffle((1,0,2))
if self.is_entity:
Entity = X[-1:].dimshuffle(1,0,2)
X = X[:-1]
b_y = self.b_y
b_yn = T.repeat(T.repeat(b_y.reshape((1,self.output_dim)),X.shape[0],axis=0).reshape((1,X.shape[0],self.output_dim)), X.shape[1], axis=0)
xif = T.dot(X, self.W_if) + self.b_if
xib = T.dot(X, self.W_ib) + self.b_ib
xff = T.dot(X, self.W_ff) + self.b_ff
xfb = T.dot(X, self.W_fb) + self.b_fb
xcf = T.dot(X, self.W_cf) + self.b_cf
xcb = T.dot(X, self.W_cb) + self.b_cb
xof = T.dot(X, self.W_of) + self.b_of
xob = T.dot(X, self.W_ob) + self.b_ob
[outputs_f, memories_f], updates_f = theano.scan(
self._step,
sequences=[xif, xff, xof, xcf],
outputs_info=[
alloc_zeros_matrix(X.shape[1], self.output_dim),
alloc_zeros_matrix(X.shape[1], self.output_dim)
],
non_sequences=[self.U_if, self.U_ff, self.U_of, self.U_cf],
truncate_gradient=self.truncate_gradient
)
[outputs_b, memories_b], updates_b = theano.scan(
self._step,
sequences=[xib, xfb, xob, xcb],
outputs_info=[
alloc_zeros_matrix(X.shape[1], self.output_dim),
alloc_zeros_matrix(X.shape[1], self.output_dim)
],
non_sequences=[self.U_ib, self.U_fb, self.U_ob, self.U_cb],
truncate_gradient=self.truncate_gradient
)
if self.return_sequences:
y = T.add(T.add(
T.tensordot(outputs_f.dimshuffle((1,0,2)), self.W_yf, [[2],[0]]),
T.tensordot(outputs_b[::-1].dimshuffle((1,0,2)), self.W_yb, [[2],[0]])),
b_yn)
# y = T.add(T.tensordot(
# T.add(outputs_f.dimshuffle((1, 0, 2)),
# outputs_b[::-1].dimshuffle((1,0,2))),
# self.W_y,[[2],[0]]),b_yn)
if self.is_entity:
return T.concatenate([y, Entity], axis=1)
else:
return y
return T.concatenate((outputs_f[-1], outputs_b[0]))
示例10: output
def output(self, input_value):
if self.size is not None:
if self.dotdim is None:
input_value = T.tensordot(input_value, self.weight, axes = [input_value.ndim - 1, 0]) + self.bias
else:
input_value = T.tensordot(input_value, self.weight, axes = [self.dotdim + 1, 0]) + self.bias
if self.dotdim + 1 < input_value.ndim - 1:
input_value = input_value.swapaxes(input_value.ndim - 1, self.dotdim + 1)
return self.activation_function(input_value)
示例11: complex_tensordot
def complex_tensordot(a, b, axes=2):
AR, AI = a[0, ...], a[1, ...]
BR, BI = b[0, ...], b[1, ...]
output = tensor.stack([
tensor.tensordot(AR, BR, axes=axes) - tensor.tensordot(AI, BI, axes=axes),
tensor.tensordot(AR, BI, axes=axes) + tensor.tensordot(AI, BR, axes=axes),
], axis=0)
return output
示例12: apply_mat_to_kron
def apply_mat_to_kron(x, a, b, arg_type="numpy"):
X = x.reshape((x.shape[0], a.shape[0], b.shape[0]))
if arg_type == "numpy":
result = np.tensordot(np.tensordot(X, a, axes=([1], [0])), b, axes=([1], [0]))
elif arg_type == "theano":
result = T.tensordot(T.tensordot(X, a, axes=([1], [0])), b, axes=([1], [0]))
else:
raise ValueError("arg_type must be 'numpy' or 'theano'")
return result.reshape((x.shape[0], -1))
示例13: contrastive_divergence_1
def contrastive_divergence_1(self, v1):
'''Determine the weight updates according to CD-1'''
h1 = self.sample_h_given_v(v1)
v2 = self.sample_v_given_h(h1)
h2p = self.propup(v2)
updates = T.tensordot(v1, h1, [[0],[0]]) - T.tensordot(v2, h2p, [[0],[0]])
f = 1.0 / self.minibatch_size
return (updates * f,
T.sum(v1 - v2, axis=0) * f,
T.sum(h1 - h2p, axis=0) * f)
示例14: function
def function(self, xs, h_prevs, c_prevs):
biases = T.shape_padright(T.ones_like(xs[:,0]))
input_vector = T.concatenate((xs, h_prevs, biases), axis=1)
forget_gate = T.nnet.sigmoid(T.tensordot(input_vector, self.W_forget_theano, axes=[[1],[1]]))
input_gate = T.nnet.sigmoid(T.tensordot(input_vector, self.W_input_theano, axes=[[1],[1]]))
candidate_vector = T.tanh(T.tensordot(input_vector, self.W_candidate_theano, axes=[[1],[1]]))
cell_state = forget_gate*c_prevs + input_gate * candidate_vector
output = T.nnet.sigmoid(T.tensordot(input_vector, self.W_output_theano, axes=[[1],[1]]))
h = output * T.tanh(cell_state)
return h, cell_state
示例15: get_output_for
def get_output_for(self, inputs, **kwargs):
"""
:param inputs: inputs: list of theano.TensorType
`inputs[0]` should always be the symbolic input variable. When
this layer has a mask input (i.e. was instantiated with
`mask_input != None`, indicating that the lengths of sequences in
each batch vary), `inputs` should have length 2, where `inputs[1]`
is the `mask`. The `mask` should be supplied as a Theano variable
denoting whether each time step in each sequence in the batch is
part of the sequence or not. `mask` should be a matrix of shape
``(n_batch, n_time_steps)`` where ``mask[i, j] = 1`` when ``j <=
(length of sequence i)`` and ``mask[i, j] = 0`` when ``j > (length
of sequence i)``.
:return: theano.TensorType
Symbolic output variable.
"""
input = inputs[0]
mask = None
if self.mask_incoming_index > 0:
mask = inputs[self.mask_incoming_index]
# compute the bi-affine part
# first via tensor dot ([batch, length, dim] * [dim, dim, num_label])
# output shape = [batch, length, dim, num_label]
out = T.tensordot(input, self.U, axes=[[2], [0]])
# second via tensor dot ([batch, length, dim, num_label] * [batch, dim, length)
# output shape = [batch, length, length, num_label]
out = T.batched_tensordot(out, input.dimshuffle(0, 2, 1), axes=([2], [1]))
out = out.dimshuffle(0, 1, 3, 2)
# compute head bias part by tensor dot ([batch, length, dim] * [dim, num_label])
# the shape of s_h should be [batch, length, num_label]
if self.W_h is not None:
s_h = T.tensordot(input, self.W_h, axes=[[2], [0]])
out = out + s_h.dimshuffle(0, 1, 'x', 2)
# compute child part by tensor dot ([batch, length, dim] * [dim, num_label]
# the shape of s_c should be [batch, length, num_label]
if self.W_c is not None:
s_c = T.tensordot(input, self.W_c, axes=[[2], [0]])
out = out + s_c.dimshuffle(0, 'x', 1, 2)
# add bias part.
if self.b is not None:
out = out + self.b.dimshuffle('x', 'x', 'x', 0)
if mask is not None:
mask_shuffled = mask.dimshuffle(0, 1, 'x', 'x')
out = out * mask_shuffled
mask_shuffled = mask.dimshuffle(0, 'x', 1, 'x')
out = out * mask_shuffled
return out