本文整理汇总了Python中tensorflow.dynamic_partition函数的典型用法代码示例。如果您正苦于以下问题:Python dynamic_partition函数的具体用法?Python dynamic_partition怎么用?Python dynamic_partition使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了dynamic_partition函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _partition_and_stitch
def _partition_and_stitch(self, args, func_name):
"""
args is a list of tensors, to be passed to self.likelihoods.<func_name>
args[-1] is the 'Y' argument, which contains the indexes to self.likelihoods.
This function splits up the args using dynamic_partition, calls the
relevant function on the likelihoods, and re-combines the result.
"""
# get the index from Y
Y = args[-1]
ind = Y[:, -1]
ind = tf.cast(ind, tf.int32)
Y = Y[:, :-1]
args[-1] = Y
# split up the arguments into chunks corresponding to the relevant likelihoods
args = zip(*[tf.dynamic_partition(X, ind, self.num_likelihoods) for X in args])
# apply the likelihood-function to each section of the data
with params_as_tensors_for(self, convert=False):
funcs = [getattr(lik, func_name) for lik in self.likelihood_list]
results = [f(*args_i) for f, args_i in zip(funcs, args)]
# stitch the results back together
partitions = tf.dynamic_partition(tf.range(0, tf.size(ind)), ind, self.num_likelihoods)
results = tf.dynamic_stitch(partitions, results)
return results
示例2: loop
def loop(q_, mask, mass_, found_):
q_list = tf.dynamic_partition(q_, mask, 2)
condition_indices = tf.dynamic_partition(tf.range(tf.shape(q_)[0]), mask, 2) # 0 element it False,
# 1 element if true
p = q_list[1] * (1.0 - mass_) / tf.reduce_sum(q_list[1])
p_new = tf.dynamic_stitch(condition_indices, [q_list[0], p])
# condition verification and mask modification
less_mask = tf.cast(tf.less(u, p_new), tf.int32) # 0 when u is bigger than p, 1 when u is less than p
condition_indices = tf.dynamic_partition(tf.range(tf.shape(p_new)[0]), less_mask,
2) # 0 when u is bigger than p, 1 when u is less than p
split_p_new = tf.dynamic_partition(p_new, less_mask, 2)
split_u = tf.dynamic_partition(u, less_mask, 2)
alpha = tf.dynamic_stitch(condition_indices, [split_p_new[0], split_u[1]])
mass_ += tf.reduce_sum(split_u[1])
mask = mask * (tf.ones_like(less_mask) - less_mask)
found_ = tf.cond(tf.equal(tf.reduce_sum(less_mask), 0),
lambda: False,
lambda: True)
alpha = tf.reshape(alpha, q_.shape)
return alpha, mask, mass_, found_
示例3: __call__
def __call__(self, X):
ind = tf.gather(tf.transpose(X), tf.shape(X)[1]-1) # ind = X[:,-1]
ind = tf.cast(ind, tf.int32)
X = tf.transpose(tf.gather(tf.transpose(X), tf.range(0, tf.shape(X)[1]-1))) # X = X[:,:-1]
# split up X into chunks corresponding to the relevant likelihoods
x_list = tf.dynamic_partition(X, ind, len(self.meanfunction_list))
# apply the likelihood-function to each section of the data
results = [m(x) for x, m in zip(x_list, self.meanfunction_list)]
# stitch the results back together
partitions = tf.dynamic_partition(tf.range(0, tf.size(ind)), ind, len(self.meanfunction_list))
return tf.dynamic_stitch(partitions, results)
示例4: split_apply_merge
def split_apply_merge(inp, partitions, fns):
"""Split input according to partitions. Pass results through fns and merge.
Args:
inp: the input vector
partitions: tensor of same length as input vector, having values 0, 1
fns: the two functions.
Returns:
the vector routed, where routed[i] = fns[partitions[i]](inp[i])
"""
new_inputs = tf.dynamic_partition(inp, partitions, len(fns))
new_outputs = [fns[i](x) for i, x in enumerate(new_inputs)]
new_indices = tf.dynamic_partition(tf.range(0, inp.get_shape()[0]), partitions, len(fns))
return tf.dynamic_stitch(new_indices, new_outputs)
示例5: add_loss
def add_loss(graph, locations, confidences, batched_bboxes, batched_num_bboxes, bbox_priors, cfg):
with graph.name_scope("loss"):
# ground truth bounding boxes:
# [batch_size, # of ground truth bounding boxes, 4]
# we also need to know the number of ground truth bounding boxes for each image in the batch
# (it can be different for each image...)
# We could assume 1 for now.
# Pass the locations, confidences, and ground truth labels to the matching function
locations = tf.reshape(locations, [-1, 4])
confidences = tf.reshape(confidences, [-1])
# add the priors to the predicted residuals
locations += tf.tile(bbox_priors, [cfg.BATCH_SIZE, 1])
# add a small epsilon to the confidences
confidences += small_epsilon
# print "Shapes"
# print locations.get_shape().as_list()
# print confidences.get_shape().as_list()
# print batched_bboxes.get_shape().as_list()
# print batched_num_bboxes.get_shape().as_list()
params = [locations, confidences, batched_bboxes, batched_num_bboxes, cfg.BATCH_SIZE, cfg.LOCATION_LOSS_ALPHA]
matching, stacked_gt_bboxes = tf.py_func(compute_assignments, params, [tf.int32, tf.float32], name="bipartite_matching")
# matching: [num_predictions * batch_size] 0s and 1s for partitioning
# stacked_gt_bboxes : [total number of gt bboxes for this batch, 4]
# dynamic partition the bounding boxes and confidences into "positives" and "negatives"
unmatched_locations, matched_locations = tf.dynamic_partition(locations, matching, 2)
unmatched_confidences, matched_confidences = tf.dynamic_partition(confidences, matching, 2)
# sum the norm from the "positive" bounding boxes
#loss = tf.nn.l2_loss(matched_locations - stacked_gt_bboxes)
# sum the negative logs of the "positive" confidences
#loss = loss - tf.reduce_sum(tf.log(matched_confidences)) + tf.reduce_sum(tf.log((1. - matched_confidences) + small_epsilon))
# sum the negative logs of one minus the all of the confidences
###loss = loss - (1. / tf.cast(tf.reduce_sum(batched_num_bboxes), tf.float32) ) * tf.reduce_sum(tf.log( 1. - confidences))
#loss = loss - tf.reduce_sum(tf.log( (1. - confidences) + small_epsilon))
location_loss = cfg.LOCATION_LOSS_ALPHA * tf.nn.l2_loss(matched_locations - stacked_gt_bboxes)
confidence_loss = -1. * tf.reduce_sum(tf.log(matched_confidences)) - tf.reduce_sum(tf.log((1. - unmatched_confidences) + small_epsilon))
#loss = -1. * tf.reduce_sum(tf.log(matched_confidences)) - tf.reduce_sum(tf.log((1. - unmatched_confidences) + small_epsilon)) + cfg.LOCATION_LOSS_ALPHA * tf.nn.l2_loss(matched_locations - stacked_gt_bboxes)
return location_loss, confidence_loss, matching
示例6: apply_factor
def apply_factor(tensor, *args, **kwargs):
scope = kwargs.pop("scope", "")
with tf.name_scope(scope):
n_args = len(args)
if n_args is 0:
tensor, output_size, error_symbol = tensor
return one_hot(tensor, output_size, scope=scope)
else:
tensor, args = slice_out_int_literals(tensor, list(args))
args, is_batched = make_batch_consistent(args)
tensor, output_size, error_symbol = tensor
# handle the case where all arguments were int literals
tensor_dim_sizes = [dim.value for dim in tensor.get_shape()]
if not tensor_dim_sizes:
return one_hot(tensor, output_size, scope=scope)
# Each arg is batch size x arg dim. Add dimensions to enable broadcasting.
for i, arg in enumerate(args):
for j in range(len(args)):
if j == i: continue
args[i] = tf.expand_dims(args[i], j + 1)
# compute joint before tensor is applied
joint = 0
for arg in args:
joint = joint + arg
# prepare for unsorted_segment_sum
joint = tf.reshape(joint, (-1, np.prod(tensor_dim_sizes)))
joint = tf.transpose(joint, [1, 0]) # |tensor| x batch_size
flat_tensor = tf.reshape(tensor, [-1])
if error_symbol is not None:
to_logsumexp = tf.dynamic_partition(joint, flat_tensor, output_size + 1)
del to_logsumexp[error_symbol]
else:
to_logsumexp = tf.dynamic_partition(joint, flat_tensor, output_size)
result = tf.pack(
map(lambda x : logsumexp(x, reduction_indices=0), to_logsumexp)
)
result = tf.transpose(result, [1, 0])
if not is_batched: result = tf.squeeze(result)
return result
示例7: create_tensor
def create_tensor(self, in_layers=None, set_tensors=True, **kwargs):
""" Perform M steps of set2set gather,
detailed descriptions in: https://arxiv.org/abs/1511.06391 """
if in_layers is None:
in_layers = self.in_layers
in_layers = convert_to_layers(in_layers)
self.build()
# Extract atom_features
atom_features = in_layers[0].out_tensor
atom_split = in_layers[1].out_tensor
self.c = tf.zeros((self.batch_size, self.n_hidden))
self.h = tf.zeros((self.batch_size, self.n_hidden))
for i in range(self.M):
q_expanded = tf.gather(self.h, atom_split)
e = tf.reduce_sum(atom_features * q_expanded, 1)
e_mols = tf.dynamic_partition(e, atom_split, self.batch_size)
# Add another value(~-Inf) to prevent error in softmax
e_mols = [
tf.concat([e_mol, tf.constant([-1000.])], 0) for e_mol in e_mols
]
a = tf.concat([tf.nn.softmax(e_mol)[:-1] for e_mol in e_mols], 0)
r = tf.segment_sum(tf.reshape(a, [-1, 1]) * atom_features, atom_split)
# Model using this layer must set pad_batches=True
q_star = tf.concat([self.h, r], axis=1)
self.h, self.c = self.LSTMStep(q_star, self.c)
out_tensor = q_star
if set_tensors:
self.variables = self.trainable_weights
self.out_tensor = out_tensor
return out_tensor
示例8: smoothed_l1_loss
def smoothed_l1_loss(input_tensor):
absval = tf.abs(input_tensor)
ind = tf.to_int32(absval > 1)
inner, outer = tf.dynamic_partition(absval, ind, 2)
loss = tf.reduce_sum(0.5 * tf.square(inner)) + \
tf.reduce_sum(outer - 0.5)
return loss
示例9: __call__
def __call__(self, *parents):
# x = [atom_features, deg_slice, membership, deg_adj_list placeholders...]
atom_features = parents[0].out_tensor
# Extract graph topology
membership = parents[2].out_tensor
# Perform the mol gather
assert (self.batch_size > 1, "graph_gather requires batches larger than 1")
# Obtain the partitions for each of the molecules
activated_par = tf.dynamic_partition(atom_features, membership,
self.batch_size)
# Sum over atoms for each molecule
sparse_reps = [
tf.reduce_sum(activated, 0, keep_dims=True)
for activated in activated_par
]
max_reps = [
tf.reduce_max(activated, 0, keep_dims=True)
for activated in activated_par
]
# Get the final sparse representations
sparse_reps = tf.concat(axis=0, values=sparse_reps)
max_reps = tf.concat(axis=0, values=max_reps)
mol_features = tf.concat(axis=1, values=[sparse_reps, max_reps])
if self.activation_fn is not None:
mol_features = self.activation_fn(mol_features)
self.out_tensor = mol_features
return mol_features
示例10: testScalarIndexOutOfRange
def testScalarIndexOutOfRange(self):
with self.test_session() as sess:
bad = 17
data = np.zeros(5)
partitions = tf.dynamic_partition(data, bad, num_partitions=7)
with self.assertRaisesOpError(r"partitions = 17 is not in \[0, 7\)"):
sess.run(partitions)
示例11: graph_gather
def graph_gather(atoms, membership_placeholder, batch_size):
"""
Parameters
----------
atoms: tf.Tensor
Of shape (n_atoms, n_feat)
membership_placeholder: tf.Placeholder
Of shape (n_atoms,). Molecule each atom belongs to.
batch_size: int
Batch size for deep model.
Returns
-------
tf.Tensor
Of shape (batch_size, n_feat)
"""
# WARNING: Does not work for Batch Size 1! If batch_size = 1, then use reduce_sum!
assert (batch_size > 1, "graph_gather requires batches larger than 1")
# Obtain the partitions for each of the molecules
activated_par = tf.dynamic_partition(atoms, membership_placeholder,
batch_size)
# Sum over atoms for each molecule
sparse_reps = [
tf.reduce_sum(activated, 0, keep_dims=True) for activated in activated_par
]
# Get the final sparse representations
sparse_reps = tf.concat(axis=0, values=sparse_reps)
return sparse_reps
示例12: mmd_objective
def mmd_objective(z, s, sdim):
"""
Compute the MMD from latent space and nuisance_id
Notes:
Reimplementation in tensorflow of the Variational Fair Autoencoder
https://arxiv.org/abs/1511.00830
"""
#mmd_method = mmd_rbf
mmd_method = mmd_fourier
z_dim = z.get_shape().as_list()[1]
# STEP 1: construct lists of samples in their proper batches
z_part = tf.dynamic_partition(z, s, sdim)
# STEP 2: add noise to all of them and get the mmd
mmd = 0
for j, z_j in enumerate(z_part):
z0_ = z_j
aux_z0 = tf.random_normal([1, z_dim]) # if an S category does not have any samples
z0 = tf.concat([z0_, aux_z0], 0)
if len(z_part) == 2:
z1_ = z_part[j + 1]
aux_z1 = tf.random_normal((1, z_dim))
z1 = tf.concat([z1_, aux_z1], axis=0)
return mmd_method(z0, z1)
z1 = z
mmd += mmd_method(z0, z1)
return mmd
示例13: call
def call(self, x, mask=None):
"""Execute this layer on input tensors.
x = [atom_features, membership]
Parameters
----------
x: list
Tensors as listed above
mask: bool, optional
Ignored. Present only to shadow superclass call() method.
Returns
-------
outputs: Tensor
Tensor of molecular features
"""
# Add trainable weights
self.build()
outputs = x[0]
membership = x[1]
if self.gaussian_expand:
outputs = self.gaussian_histogram(outputs)
outputs = tf.dynamic_partition(outputs, membership, self.batch_size)
output_molecules = [tf.reduce_sum(molecule, 0) for molecule in outputs]
output_molecules = tf.stack(output_molecules)
if self.gaussian_expand:
output_molecules = tf.matmul(output_molecules, self.W) + self.b
output_molecules = self.activation(output_molecules)
return output_molecules
示例14: mol_conv_layer
def mol_conv_layer(atoms, cH_params, aux_params, layer):
#Sum all neighbors using adjacency matrix
atom_sum_neigh = sum_neigh(atoms, aux_params, layer)
# Partition the atom matrix by degree of atoms
# THIS CREATES PROBLEMS WITH GRADIENTS. NEED TO USE SLICING
indices = tf.sub(deg_list_ph, tf.constant(1,dtype=tf.int32))
atom_partitions = tf.dynamic_partition(atom_sum_neigh, indices, max_deg)
# Get collection of modified atom features
new_rel_atoms_collection = []
for deg in range(1,6):
# Obtain relevant atoms for this degree
rel_atoms = atom_partitions[deg-1]
# Apply hidden affine to relevant atoms and append
if bool_separate_conv_depths:
out = affine(rel_atoms, cH_params['W'+str(deg)+'_'+str(layer)], cH_params['b'+str(deg)+'_'+str(layer)])
else:
out = affine(rel_atoms, cH_params['W'+str(deg)], cH_params['b'+str(deg)])
new_rel_atoms_collection.append(out)
# Combine all atoms back into the list
# NOTE: FOR NOW USE CONCATENATION. MEANS WE CANNOT USE ARBITARY deg_list ORDER
hidden_atoms = tf.concat(0, new_rel_atoms_collection)
# Apply relu
activated_atoms = tf.nn.relu(hidden_atoms)
return activated_atoms
示例15: _build_graph
def _build_graph(self):
"""Construct tensorflow nodes for round of clustering"""
# N.B. without tf.Variable, makes awesome glitchy clustered images
self.centroids_in = tf.Variable(tf.slice(tf.random_shuffle(self.arr),
[0, 0], [self.k, -1]), name="centroids_in")
# tiled should be shape(self.n_pixels, self.k, size_data = 2 + self.channels)
tiled_pix = tf.tile(tf.expand_dims(self.arr, 1),
multiples=[1, self.k, 1], name="tiled_pix")
# no need to take square root b/c positive reals and sqrt are isomorphic
def radical_euclidean_dist(x, y):
"""Takes in 2 tensors and returns euclidean distance radical, i.e. dist**2"""
with tf.name_scope("radical_euclidean"):
return tf.square(tf.sub(x, y))
# should be shape(self.n_pixels, self.k)
distances = tf.reduce_sum(radical_euclidean_dist(tiled_pix, self.centroids_in),
reduction_indices=2, name="distances")
# should be shape(self.n_pixels)
nearest = tf.to_int32(tf.argmin(distances, 1), name="nearest")
# should be list of len self.k with tensors of shape(size_cluster, size_data)
self.clusters = tf.dynamic_partition(self.arr, nearest, self.k)
# should be shape(self.k, size_data)
self.centroids = tf.pack([tf.reduce_mean(cluster, 0) for cluster in self.clusters],
name="centroids_out")
self.update_roids = tf.assign(self.centroids_in, self.centroids)