Python tensorflow.scatter_sub() Examples
The following are 30
code examples of tensorflow.scatter_sub().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
tensorflow
, or try the search function
.
Example #1
Source File: mnist-embeddings.py From tensorpack with Apache License 2.0 | 6 votes |
def center_loss(embedding, label, num_classes, alpha=0.1, scope="center_loss"): r"""Center-Loss as described in the paper `A Discriminative Feature Learning Approach for Deep Face Recognition` <http://ydwen.github.io/papers/WenECCV16.pdf> by Wen et al. Args: embedding (tf.Tensor): features produced by the network label (tf.Tensor): ground-truth label for each feature num_classes (int): number of different classes alpha (float): learning rate for updating the centers Returns: tf.Tensor: center loss """ nrof_features = embedding.get_shape()[1] centers = tf.get_variable('centers', [num_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alpha) * (centers_batch - embedding) centers = tf.scatter_sub(centers, label, diff) loss = tf.reduce_mean(tf.square(embedding - centers_batch), name=scope) return loss
Example #2
Source File: facenet.py From Rekognition with GNU General Public License v3.0 | 6 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ logger.info(msg="center_loss called") nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #3
Source File: loss.py From TF_Face_Toolbox with Apache License 2.0 | 6 votes |
def center_loss(features, labels, num_classes, alpha=0.99, weight=1.0): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ num_features = features.get_shape()[1] centers = tf.get_variable('centers', [num_classes, num_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) labels = tf.reshape(labels, [-1]) centers_batch = tf.gather(centers, labels) diffs = (1 - alpha) * (centers_batch - features) centers = tf.scatter_sub(centers, labels, diffs) center_loss_mean = tf.reduce_mean(tf.square(features - centers_batch)) tf.add_to_collection('losses', weight*center_loss_mean) return center_loss_mean, centers
Example #4
Source File: face_losses.py From MobileFaceNet_Tensorflow with Apache License 2.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #5
Source File: facenet.py From facenet with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #6
Source File: gitloss.py From Git-Loss-For-Deep-Face-Recognition with MIT License | 5 votes |
def get_git_loss(features, labels, num_classes): len_features = features.get_shape()[1] centers = tf.get_variable('centers', [num_classes, len_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) labels = tf.reshape(labels, [-1]) centers_batch = tf.gather(centers, labels) loss = tf.reduce_mean(tf.square(features - centers_batch)) # Pairwise differences diffs = (features[:, tf.newaxis] - centers_batch[tf.newaxis, :]) diffs_shape = tf.shape(diffs) # Mask diagonal (where i == j) mask = 1 - tf.eye(diffs_shape[0], diffs_shape[1], dtype=diffs.dtype) diffs = diffs * mask[:, :, tf.newaxis] # combinaton of two losses loss2 = tf.reduce_mean(tf.divide(1, 1 + tf.square(diffs))) diff = centers_batch - features unique_label, unique_idx, unique_count = tf.unique_with_counts(labels) appear_times = tf.gather(unique_count, unique_idx) appear_times = tf.reshape(appear_times, [-1, 1]) diff = tf.divide(diff, tf.cast((1 + appear_times), tf.float32)) diff = CENTER_LOSS_ALPHA * diff centers_update_op = tf.scatter_sub(centers, labels, diff) # diff is used to get updated centers. # combo_loss = value_factor * loss + new_factor * loss2 combo_loss = FLAGS.lambda_c * loss + FLAGS.lambda_g * loss2 return combo_loss, centers_update_op
Example #7
Source File: losses.py From AttGAN-Tensorflow with MIT License | 5 votes |
def center_loss(features, labels, num_classes, alpha=0.5, updates_collections=tf.GraphKeys.UPDATE_OPS, scope=None): # modified from https://github.com/EncodeTS/TensorFlow_Center_Loss/blob/master/center_loss.py assert features.shape.ndims == 2, 'The rank of `features` should be 2!' assert 0 <= alpha <= 1, '`alpha` should be in [0, 1]!' with tf.variable_scope(scope, 'center_loss', [features, labels]): centers = tf.get_variable('centers', shape=[num_classes, features.get_shape()[-1]], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) centers_batch = tf.gather(centers, labels) diff = centers_batch - features _, unique_idx, unique_count = tf.unique_with_counts(labels) appear_times = tf.gather(unique_count, unique_idx) appear_times = tf.reshape(appear_times, [-1, 1]) diff = diff / tf.cast((1 + appear_times), tf.float32) diff = alpha * diff update_centers = tf.scatter_sub(centers, labels, diff) center_loss = 0.5 * tf.reduce_mean(tf.reduce_sum((centers_batch - features)**2, axis=-1)) if updates_collections is None: with tf.control_dependencies([update_centers]): center_loss = tf.identity(center_loss) else: tf.add_to_collections(updates_collections, update_centers) return center_loss, centers
Example #8
Source File: facenet.py From real-time-face-recognition-with-facenet with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #9
Source File: face_losses.py From MobileFaceNet_TF with Apache License 2.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #10
Source File: association.py From Deep-Association-Learning with MIT License | 5 votes |
def update_intra_anchor(intra_anchors, intra_anchors_n, features_cam, labels_cam): # update intra-anchor for each camera for i in range(FLAGS.num_cams): # compute the difference between old anchors and the new given data diff = tf.gather(intra_anchors_n[i], labels_cam[i]) - features_cam[i] # update the intra-anchors under each camera intra_anchors[i] = tf.scatter_sub(intra_anchors[i], labels_cam[i], FLAGS.eta * diff) return intra_anchors
Example #11
Source File: facenet.py From facenet-demo with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #12
Source File: facenet.py From facenet-demo with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #13
Source File: facenet.py From uai-sdk with Apache License 2.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #14
Source File: facenet.py From uai-sdk with Apache License 2.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #15
Source File: train_double.py From aitom with GNU General Public License v3.0 | 5 votes |
def get_center_loss(features, labels, alpha, num_classes): """ Arguments: features: Tensor,shape [batch_size, feature_length]. labels: Tensor,shape [batch_size].#not the one hot label alpha: center upgrade learning rate num_classes: how many classes. Return: loss: Tensor, centers: Tensor centers_update_op: """ len_features = features.get_shape()[1] centers = tf.get_variable('centers', [num_classes, len_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) labels = tf.reshape(labels, [-1]) centers_batch = tf.gather(centers, labels) loss = tf.nn.l2_loss(features - centers_batch) diff = centers_batch - features unique_label, unique_idx, unique_count = tf.unique_with_counts(labels) appear_times = tf.gather(unique_count, unique_idx) appear_times = tf.reshape(appear_times, [-1, 1]) diff = diff / tf.cast((1 + appear_times), tf.float32) diff = alpha * diff centers_update_op = tf.scatter_sub(centers, labels, diff) # need to update after every epoch, the key is to update the center of the classes. return loss, centers, centers_update_op
Example #16
Source File: facenet.py From facenet_mtcnn_to_mobile with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #17
Source File: facenet.py From TNT with GNU General Public License v3.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #18
Source File: densenet.py From document-ocr with Apache License 2.0 | 5 votes |
def center_loss(self, features, label, alpha, num_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) copy from facenet: https://github.com/davidsandberg/facenet """ num_features = features.get_shape()[1] centers = tf.get_variable('centers', [num_classes, num_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alpha) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #19
Source File: scatter_ops_test.py From deep_image_model with Apache License 2.0 | 5 votes |
def testRepeatIndicesSub(self): self._VariableRankTests(tf.scatter_sub, True)
Example #20
Source File: scatter_ops_test.py From deep_image_model with Apache License 2.0 | 5 votes |
def testVariableRankSub(self): self._VariableRankTests(tf.scatter_sub)
Example #21
Source File: embedding_ops_test.py From deep_image_model with Apache License 2.0 | 5 votes |
def testSubRandom(self): # Random shapes of rank 4, random indices for _ in range(5): shape = np.random.randint(1, 20, size=4) indices = np.random.randint(shape[0], size=2 * shape[0]) self._TestCase(_AsLong(list(shape)), list(indices), tf.scatter_sub)
Example #22
Source File: facenet.py From facenet_trt with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #23
Source File: facenet.py From real-time-deep-face-recognition with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #24
Source File: facenet.py From tindetheus with MIT License | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #25
Source File: optimizer.py From Parser-v3 with Apache License 2.0 | 5 votes |
def minimize(self, loss, variables=None): """""" variables = variables or tf.trainable_variables() gradients = tf.gradients(loss, variables, colocate_gradients_with_ops=True, gate_gradients=True, aggregation_method=2) gradients = {variable: gradient for variable, gradient in zip(variables, gradients) if gradient is not None} variable_steps = {} variable_indices = {} updates = [tf.assign_add(self.global_step, 1)] for variable, gradient in six.iteritems(gradients): if isinstance(gradient, tf.Tensor): step, update = self.dense_update(gradient, variable) variable_steps[variable] = step updates.extend(update) else: step, indices, update = self.sparse_update(gradient, variable) variable_steps[variable] = step variable_indices[variable] = indices updates.extend(update) variable_steps = self.clip_by_global_norm(variable_steps) for variable, step in six.iteritems(variable_steps): if variable in variable_indices: indices = variable_indices[variable] updates.append(tf.scatter_sub(variable, indices, step)) else: updates.append(tf.assign_sub(variable, step)) return tf.tuple(updates)[0] #=============================================================
Example #26
Source File: loss_utils.py From BERT with Apache License 2.0 | 5 votes |
def center_loss_v2(config, features, labels, centers=None, **kargs): alpha = config.alpha num_classes = config.num_classes with tf.variable_scope(config.scope+"_center_loss"): print("==center loss==") len_features = features.get_shape()[1] if not centers: centers = tf.get_variable('centers', [num_classes, len_features], dtype=tf.float32, initializer=tf.contrib.layers.xavier_initializer(), trainable=False) print("==add center parameters==") centers_batch = tf.gather(centers, labels) loss = tf.nn.l2_loss(features - centers_batch) diff = centers_batch - features unique_label, unique_idx, unique_count = tf.unique_with_counts(labels) appear_times = tf.gather(unique_count, unique_idx) appear_times = tf.reshape(appear_times, [-1, 1]) diff = diff / tf.cast((1 + appear_times), tf.float32) diff = alpha * diff centers_update_op = tf.scatter_sub(centers, labels, diff) tf.add_to_collection(tf.GraphKeys.UPDATE_OPS, centers_update_op) return loss, centers
Example #27
Source File: facenet.py From TNT with GNU General Public License v3.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #28
Source File: facenet.py From TNT with GNU General Public License v3.0 | 5 votes |
def center_loss(features, label, alfa, nrof_classes): """Center loss based on the paper "A Discriminative Feature Learning Approach for Deep Face Recognition" (http://ydwen.github.io/papers/WenECCV16.pdf) """ nrof_features = features.get_shape()[1] centers = tf.get_variable('centers', [nrof_classes, nrof_features], dtype=tf.float32, initializer=tf.constant_initializer(0), trainable=False) label = tf.reshape(label, [-1]) centers_batch = tf.gather(centers, label) diff = (1 - alfa) * (centers_batch - features) centers = tf.scatter_sub(centers, label, diff) with tf.control_dependencies([centers]): loss = tf.reduce_mean(tf.square(features - centers_batch)) return loss, centers
Example #29
Source File: image_ops.py From NAS-Benchmark with GNU General Public License v3.0 | 4 votes |
def batch_norm_with_mask(x, is_training, mask, num_channels, name="bn", decay=0.9, epsilon=1e-3, data_format="NHWC"): shape = [num_channels] indices = tf.where(mask) indices = tf.to_int32(indices) indices = tf.reshape(indices, [-1]) with tf.variable_scope(name, reuse=None if is_training else True): offset = tf.get_variable( "offset", shape, initializer=tf.constant_initializer(0.0, dtype=tf.float32)) scale = tf.get_variable( "scale", shape, initializer=tf.constant_initializer(1.0, dtype=tf.float32)) offset = tf.boolean_mask(offset, mask) scale = tf.boolean_mask(scale, mask) moving_mean = tf.get_variable( "moving_mean", shape, trainable=False, initializer=tf.constant_initializer(0.0, dtype=tf.float32)) moving_variance = tf.get_variable( "moving_variance", shape, trainable=False, initializer=tf.constant_initializer(1.0, dtype=tf.float32)) if is_training: x, mean, variance = tf.nn.fused_batch_norm( x, scale, offset, epsilon=epsilon, data_format=data_format, is_training=True) mean = (1.0 - decay) * (tf.boolean_mask(moving_mean, mask) - mean) variance = (1.0 - decay) * (tf.boolean_mask(moving_variance, mask) - variance) update_mean = tf.scatter_sub(moving_mean, indices, mean, use_locking=True) update_variance = tf.scatter_sub( moving_variance, indices, variance, use_locking=True) with tf.control_dependencies([update_mean, update_variance]): x = tf.identity(x) else: masked_moving_mean = tf.boolean_mask(moving_mean, mask) masked_moving_variance = tf.boolean_mask(moving_variance, mask) x, _, _ = tf.nn.fused_batch_norm(x, scale, offset, mean=masked_moving_mean, variance=masked_moving_variance, epsilon=epsilon, data_format=data_format, is_training=False) return x
Example #30
Source File: image_ops.py From enas with Apache License 2.0 | 4 votes |
def batch_norm_with_mask(x, is_training, mask, num_channels, name="bn", decay=0.9, epsilon=1e-3, data_format="NHWC"): shape = [num_channels] indices = tf.where(mask) indices = tf.to_int32(indices) indices = tf.reshape(indices, [-1]) with tf.variable_scope(name, reuse=None if is_training else True): offset = tf.get_variable( "offset", shape, initializer=tf.constant_initializer(0.0, dtype=tf.float32)) scale = tf.get_variable( "scale", shape, initializer=tf.constant_initializer(1.0, dtype=tf.float32)) offset = tf.boolean_mask(offset, mask) scale = tf.boolean_mask(scale, mask) moving_mean = tf.get_variable( "moving_mean", shape, trainable=False, initializer=tf.constant_initializer(0.0, dtype=tf.float32)) moving_variance = tf.get_variable( "moving_variance", shape, trainable=False, initializer=tf.constant_initializer(1.0, dtype=tf.float32)) if is_training: x, mean, variance = tf.nn.fused_batch_norm( x, scale, offset, epsilon=epsilon, data_format=data_format, is_training=True) mean = (1.0 - decay) * (tf.boolean_mask(moving_mean, mask) - mean) variance = (1.0 - decay) * (tf.boolean_mask(moving_variance, mask) - variance) update_mean = tf.scatter_sub(moving_mean, indices, mean, use_locking=True) update_variance = tf.scatter_sub( moving_variance, indices, variance, use_locking=True) with tf.control_dependencies([update_mean, update_variance]): x = tf.identity(x) else: masked_moving_mean = tf.boolean_mask(moving_mean, mask) masked_moving_variance = tf.boolean_mask(moving_variance, mask) x, _, _ = tf.nn.fused_batch_norm(x, scale, offset, mean=masked_moving_mean, variance=masked_moving_variance, epsilon=epsilon, data_format=data_format, is_training=False) return x