Python tensorflow.no_op() Examples
The following are 30
code examples of tensorflow.no_op().
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: 1_simple_boston.py From deep-learning-note with MIT License | 6 votes |
def __init__(self, optimizer, layer_size, num_layers, learn_mixture_weights, seed): """Initializes a `_DNNBuilder`. Args: optimizer: An `Optimizer` instance for training both the subnetwork and the mixture weights. layer_size: The number of nodes to output at each hidden layer. num_layers: The number of hidden layers. learn_mixture_weights: Whether to solve a learning problem to find the best mixture weights, or use their default value according to the mixture weight type. When `False`, the subnetworks will return a no_op for the mixture weight train op. seed: A random seed. Returns: An instance of `_SimpleDNNBuilder`. """ self._optimizer = optimizer self._layer_size = layer_size self._num_layers = num_layers self._learn_mixture_weights = learn_mixture_weights self._seed = seed
Example #2
Source File: sga_optimizer.py From HyperGAN with MIT License | 6 votes |
def apply_gradients(self, grads_and_vars, global_step=None, name=None): ws = [v for _,v in grads_and_vars] grads = [g for g,_ in grads_and_vars] self._prepare() jac_vec = self.fwd_gradients(grads,ws, grad_xs=grads,stop_gradients=ws) jac_vec = [tf.zeros_like(x) if dydx is None else dydx for x,dydx in zip(ws,jac_vec)] jac_tran_vec = tf.gradients(grads, ws, grad_ys=grads, stop_gradients=ws) jac_tran_vec = [tf.zeros_like(x) if dydx is None else dydx for x,dydx in zip(ws,jac_tran_vec)] at_xi = [(ht-h)*0.5 for (h,ht) in zip(jac_vec, jac_tran_vec)] if self.config.minus: new_grads = [g-a for g,a in zip(grads, at_xi)] else: new_grads = [g+a for g,a in zip(grads, at_xi)] grads_and_vars2 = zip(new_grads, ws) op8 = self.optimizer.apply_gradients(list(grads_and_vars2).copy(), global_step=global_step, name=name) with tf.get_default_graph().control_dependencies([op8]): return tf.no_op()
Example #3
Source File: optimize.py From fine-lm with MIT License | 6 votes |
def weight_noise(noise_rate, learning_rate, var_list): """Apply weight noise to vars in var_list.""" if not noise_rate: return [tf.no_op()] tf.logging.info("Applying weight noise scaled by learning rate, " "noise_rate: %0.5f", noise_rate) noise_ops = [] for v in var_list: with tf.device(v._ref().device): # pylint: disable=protected-access scale = noise_rate * learning_rate * 0.001 tf.summary.scalar("weight_noise_scale", scale) noise = tf.truncated_normal(v.shape) * scale noise_op = v.assign_add(noise) noise_ops.append(noise_op) return noise_ops
Example #4
Source File: algorithm.py From soccer-matlab with BSD 2-Clause "Simplified" License | 6 votes |
def begin_episode(self, agent_indices): """Reset the recurrent states and stored episode. Args: agent_indices: Tensor containing current batch indices. Returns: Summary tensor. """ with tf.name_scope('begin_episode/'): if self._last_state is None: reset_state = tf.no_op() else: reset_state = utility.reinit_nested_vars( self._last_state, agent_indices) reset_buffer = self._episodes.clear(agent_indices) with tf.control_dependencies([reset_state, reset_buffer]): return tf.constant('')
Example #5
Source File: multistep_optimizer.py From fine-lm with MIT License | 6 votes |
def _finish(self, update_ops, name_scope): """Updates beta_power variables every n batches and incrs counter.""" iter_ = self._get_iter_variable() beta1_power, beta2_power = self._get_beta_accumulators() with tf.control_dependencies(update_ops): with tf.colocate_with(iter_): def update_beta_op(): update_beta1 = beta1_power.assign( beta1_power * self._beta1_t, use_locking=self._use_locking) update_beta2 = beta2_power.assign( beta2_power * self._beta2_t, use_locking=self._use_locking) return tf.group(update_beta1, update_beta2) maybe_update_beta = tf.cond( tf.equal(iter_, 0), update_beta_op, tf.no_op) with tf.control_dependencies([maybe_update_beta]): update_iter = iter_.assign(tf.mod(iter_ + 1, self._n_t), use_locking=self._use_locking) return tf.group( *update_ops + [update_iter, maybe_update_beta], name=name_scope)
Example #6
Source File: core.py From lm-human-preferences with MIT License | 6 votes |
def variable_synchronizer(comm, vars, *, limit=1<<28): """Synchronize `vars` from the root to other processs""" if comm.Get_size() == 1: return tf.no_op() # Split vars into chunks so that no chunk is over limit bytes batches = chunk_tensors(sorted(vars, key=lambda v: v.name), limit=limit) # Synchronize each batch, using a separate communicator to ensure safety prev = tf.no_op() for batch in batches: with tf.control_dependencies([prev]): assigns = [] values = map_flat_bits(partial(mpi_bcast, comm), batch) for var, value in zip(batch, values): assigns.append(var.assign(value)) prev = tf.group(*assigns) return prev
Example #7
Source File: inputs.py From glas with Apache License 2.0 | 6 votes |
def _get_data(dataset, batch_size=None, num_epochs=None, num_readers=1): """ Get the subset of the passed in dataset from the directory indicated """ if batch_size is None: raise ValueError('batch_size must not specified') data_provider = slim.dataset_data_provider.DatasetDataProvider( dataset, num_readers=num_readers, num_epochs=num_epochs, common_queue_capacity=20 * batch_size, common_queue_min=10 * batch_size) [image] = data_provider.get(['image']) image = preprocess_image(image) return tf.no_op(), {}, image # pylint: disable=unused-argument
Example #8
Source File: saver.py From imgcomp-cvpr with GNU General Public License v3.0 | 6 votes |
def __init__(self, ckpt_dir, **kwargs_saver): """ :param ckpt_dir: where to save data :param kwargs_saver: Passed on to the tf.train.Saver that will be created """ os.makedirs(ckpt_dir, exist_ok=True) self.ckpt_dir = ckpt_dir self.ckpt_base_file_path = path.join(ckpt_dir, _CKPT_FN) all_saveable_vars = tf_helpers.all_saveable_objects() var_list = kwargs_saver.get('var_list', all_saveable_vars) var_names = VarNames(ckpt_dir) if not var_names.exists(): print('Saver for {} saves {} variables...'.format(self.ckpt_dir, len(var_list))) var_names.write([v.name for v in var_list]) unrestored_vars = [v for v in all_saveable_vars if v not in var_list] if unrestored_vars: print('Found {} unrestored variables'.format(len(unrestored_vars))) self.init_unrestored_op = (tf.variables_initializer(unrestored_vars) if unrestored_vars else tf.no_op()) self.saver = tf.train.Saver(**kwargs_saver)
Example #9
Source File: model_deploy_test.py From DOTA_models with Apache License 2.0 | 6 votes |
def testVariablesPS(self): deploy_config = model_deploy.DeploymentConfig(num_ps_tasks=2) with tf.device(deploy_config.variables_device()): a = tf.Variable(0) b = tf.Variable(0) c = tf.no_op() d = slim.variable('a', [], caching_device=deploy_config.caching_device()) self.assertDeviceEqual(a.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(a.device, a.value().device) self.assertDeviceEqual(b.device, '/job:ps/task:1/device:CPU:0') self.assertDeviceEqual(b.device, b.value().device) self.assertDeviceEqual(c.device, '') self.assertDeviceEqual(d.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(d.value().device, '')
Example #10
Source File: model_deploy_test.py From ctw-baseline with MIT License | 6 votes |
def testVariablesPS(self): deploy_config = model_deploy.DeploymentConfig(num_ps_tasks=2) with tf.device(deploy_config.variables_device()): a = tf.Variable(0) b = tf.Variable(0) c = tf.no_op() d = slim.variable('a', [], caching_device=deploy_config.caching_device()) self.assertDeviceEqual(a.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(a.device, a.value().device) self.assertDeviceEqual(b.device, '/job:ps/task:1/device:CPU:0') self.assertDeviceEqual(b.device, b.value().device) self.assertDeviceEqual(c.device, '') self.assertDeviceEqual(d.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(d.value().device, '')
Example #11
Source File: sac_agent.py From rlgraph with Apache License 2.0 | 6 votes |
def _graph_fn_get_should_sync(self): if get_backend() == "tf": inc_op = tf.assign_add(self.steps_since_last_sync, 1) should_sync = inc_op >= self.q_sync_spec.sync_interval def reset_op(): op = tf.assign(self.steps_since_last_sync, 0) with tf.control_dependencies([op]): return tf.no_op() sync_op = tf.cond( pred=inc_op >= self.q_sync_spec.sync_interval, true_fn=reset_op, false_fn=tf.no_op ) with tf.control_dependencies([sync_op]): return tf.identity(should_sync) else: raise NotImplementedError("TODO")
Example #12
Source File: sac_agent.py From rlgraph with Apache License 2.0 | 6 votes |
def _graph_fn_sync(self, should_sync): assign_ops = [] tau = self.q_sync_spec.sync_tau if tau != 1.0: all_source_vars = [source.get_variables(collections=None, custom_scope_separator="-") for source in self._q_functions] all_dest_vars = [destination.get_variables(collections=None, custom_scope_separator="-") for destination in self._target_q_functions] for source_vars, dest_vars in zip(all_source_vars, all_dest_vars): for (source_key, source_var), (dest_key, dest_var) in zip(sorted(source_vars.items()), sorted(dest_vars.items())): assign_ops.append(tf.assign(dest_var, tau * source_var + (1.0 - tau) * dest_var)) else: all_source_vars = [source.variables() for source in self._q_functions] for source_vars, destination in zip(all_source_vars, self._target_q_functions): assign_ops.append(destination.sync(source_vars)) assert len(assign_ops) > 0 grouped_op = tf.group(assign_ops) def assign_op(): # Make sure we are returning no_op as opposed to reference with tf.control_dependencies([grouped_op]): return tf.no_op() cond_assign_op = tf.cond(should_sync, true_fn=assign_op, false_fn=tf.no_op) with tf.control_dependencies([cond_assign_op]): return tf.no_op()
Example #13
Source File: model_deploy_test.py From DOTA_models with Apache License 2.0 | 6 votes |
def testPS(self): deploy_config = model_deploy.DeploymentConfig(num_clones=1, num_ps_tasks=1) self.assertDeviceEqual(deploy_config.clone_device(0), '/job:worker/device:GPU:0') self.assertEqual(deploy_config.clone_scope(0), '') self.assertDeviceEqual(deploy_config.optimizer_device(), '/job:worker/device:CPU:0') self.assertDeviceEqual(deploy_config.inputs_device(), '/job:worker/device:CPU:0') with tf.device(deploy_config.variables_device()): a = tf.Variable(0) b = tf.Variable(0) c = tf.no_op() d = slim.variable('a', [], caching_device=deploy_config.caching_device()) self.assertDeviceEqual(a.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(a.device, a.value().device) self.assertDeviceEqual(b.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(b.device, b.value().device) self.assertDeviceEqual(c.device, '') self.assertDeviceEqual(d.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(d.value().device, '')
Example #14
Source File: model_deploy_test.py From ctw-baseline with MIT License | 6 votes |
def testPS(self): deploy_config = model_deploy.DeploymentConfig(num_clones=1, num_ps_tasks=1) self.assertDeviceEqual(deploy_config.clone_device(0), '/job:worker/device:GPU:0') self.assertEqual(deploy_config.clone_scope(0), '') self.assertDeviceEqual(deploy_config.optimizer_device(), '/job:worker/device:CPU:0') self.assertDeviceEqual(deploy_config.inputs_device(), '/job:worker/device:CPU:0') with tf.device(deploy_config.variables_device()): a = tf.Variable(0) b = tf.Variable(0) c = tf.no_op() d = slim.variable('a', [], caching_device=deploy_config.caching_device()) self.assertDeviceEqual(a.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(a.device, a.value().device) self.assertDeviceEqual(b.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(b.device, b.value().device) self.assertDeviceEqual(c.device, '') self.assertDeviceEqual(d.device, '/job:ps/task:0/device:CPU:0') self.assertDeviceEqual(d.value().device, '')
Example #15
Source File: distribution.py From rlgraph with Apache License 2.0 | 6 votes |
def _graph_fn_kl_divergence(self, distribution, distribution_b): """ Kullback-Leibler divergence between two distribution objects. Args: distribution (tf.Distribution): The (already parameterized) backend-specific distribution 1. distribution_b (tf.Distribution): The other distribution object. Returns: DataOp: (batch-wise) KL-divergence between the two distributions. """ if get_backend() == "tf": return tf.no_op() # TODO: never tested. tf throws error: NotImplementedError: No KL(distribution_a || distribution_b) registered for distribution_a type Bernoulli and distribution_b type ndarray #return tf.distributions.kl_divergence( # distribution_a=distribution_a, # distribution_b=distribution_b, # allow_nan_stats=True, # name=None #)
Example #16
Source File: pruning_wrapper.py From model-optimization with Apache License 2.0 | 5 votes |
def call(self, inputs, training=None): if training is None: training = K.learning_phase() def add_update(): with tf.control_dependencies([ tf.debugging.assert_greater_equal( self.pruning_step, np.int64(0), message=self._PRUNE_CALLBACK_ERROR_MSG) ]): with tf.control_dependencies( [self.pruning_obj.conditional_mask_update()]): return tf.no_op('update') def no_op(): return tf.no_op('no_update') update_op = tf_utils.smart_cond(training, add_update, no_op) self.add_update(update_op) # Always execute the op that performs weights = weights * mask # Relies on UpdatePruningStep callback to ensure the weights # are sparse after the final backpropagation. # # self.add_update does nothing during eager execution. self.add_update(self.pruning_obj.weight_mask_op()) # TODO(evcu) remove this check after dropping py2 support. In py3 getargspec # is deprecated. if hasattr(inspect, 'getfullargspec'): args = inspect.getfullargspec(self.layer.call).args else: args = inspect.getargspec(self.layer.call).args # Propagate the training bool to the underlying layer if it accepts # training as an arg. if 'training' in args: return self.layer.call(inputs, training=training) return self.layer.call(inputs)
Example #17
Source File: ema_optimizer.py From HyperGAN with MIT License | 5 votes |
def apply_gradients(self, grads_and_vars, global_step=None, name=None): d_vars = [] g_vars = [] for grad,var in grads_and_vars: if var in self.gan.d_vars(): d_vars += [var] elif var in self.gan.g_vars(): g_vars += [var] else: raise("Couldn't find var in g_vars or d_vars") if self.config.apply_on == "discriminator": ema_vars = d_vars else: ema_vars = d_vars + g_vars with ops.init_scope(): [self._get_or_make_slot(v, v, "ema", self._name) for v in ema_vars] self.optimizer._create_slots([v for g,v in grads_and_vars]) for name in self.optimizer.get_slot_names(): for var in self.optimizer.variables(): self._zeros_slot(var, "ema", self.name) self._prepare() ema_slots = [self.get_slot(v, "ema") for v in ema_vars] for name in self.optimizer.get_slot_names(): for var in self.optimizer.variables(): ema_vars += [var] ema_slots += [self._zeros_slot(var, "ema", self.name)] def calculate_ema(_v1,_v2): return self._decay *_v1 + (1-self._decay)*_v2 op1 = tf.group(*[tf.assign(w, v) for w,v in zip(ema_slots, ema_vars)]) # store variables with tf.get_default_graph().control_dependencies([op1]): op2 = self.optimizer.apply_gradients(grads_and_vars, global_step=global_step, name=name) with tf.get_default_graph().control_dependencies([op2]): calculated_ema = [calculate_ema(v1, v2) for v1,v2 in zip(ema_slots, ema_vars)] # store variables op3 = tf.group(*[tf.assign(w, v) for w,v in zip(ema_vars, calculated_ema)]) with tf.get_default_graph().control_dependencies([op3]): return tf.no_op()
Example #18
Source File: inference_wrapper.py From SiamFC-TensorFlow with MIT License | 5 votes |
def build_model(self, model_config, track_config): self.model_config = model_config self.track_config = track_config self.build_inputs() self.build_search_images() self.build_template() self.build_detection() self.build_upsample() self.dumb_op = tf.no_op('dumb_operation')
Example #19
Source File: sac_agent.py From rlgraph with Apache License 2.0 | 5 votes |
def _graph_fn_training_step(self, other_step_op=None): if self.agent is not None: add_op = tf.assign_add(self.agent.graph_executor.global_training_timestep, 1) op_list = [add_op] + [other_step_op] if other_step_op is not None else [] with tf.control_dependencies(op_list): return tf.no_op() if other_step_op is None else other_step_op else: return tf.no_op() if other_step_op is None else other_step_op
Example #20
Source File: sac_agent.py From rlgraph with Apache License 2.0 | 5 votes |
def _graph_fn_no_op(self): return tf.no_op()
Example #21
Source File: preprocess_layer.py From rlgraph with Apache License 2.0 | 5 votes |
def _graph_fn_reset(self): """ Does some reset operations e.g. in case this PreprocessLayer contains variables and state. Returns: SingleDataOp: The op that resets this processor to some initial state. """ if get_backend() == "tf": return tf.no_op(name="reset-op") # Not mandatory. # TODO: fix for python backend. return
Example #22
Source File: gumbel_softmax.py From rlgraph with Apache License 2.0 | 5 votes |
def _graph_fn_kl_divergence(self, distribution, distribution_b): if get_backend() == "tf": return tf.no_op() elif get_backend() == "pytorch": return None
Example #23
Source File: preprocessor_stack.py From rlgraph with Apache License 2.0 | 5 votes |
def _graph_fn_reset(self, *preprocessor_resets): if get_backend() == "tf": with tf.control_dependencies(preprocessor_resets): return tf.no_op()
Example #24
Source File: shape_utils.py From BMW-TensorFlow-Inference-API-CPU with Apache License 2.0 | 5 votes |
def assert_shape_equal_along_first_dimension(shape_a, shape_b): """Asserts that shape_a and shape_b are the same along the 0th-dimension. If the shapes are static, raises a ValueError when the shapes mismatch. If the shapes are dynamic, raises a tf InvalidArgumentError when the shapes mismatch. Args: shape_a: a list containing shape of the first tensor. shape_b: a list containing shape of the second tensor. Returns: Either a tf.no_op() when shapes are all static and a tf.assert_equal() op when the shapes are dynamic. Raises: ValueError: When shapes are both static and unequal. """ if isinstance(shape_a[0], int) and isinstance(shape_b[0], int): if shape_a[0] != shape_b[0]: raise ValueError('Unequal first dimension {}, {}'.format( shape_a[0], shape_b[0])) else: return tf.no_op() else: return tf.assert_equal(shape_a[0], shape_b[0])
Example #25
Source File: shape_utils.py From vehicle_counting_tensorflow with MIT License | 5 votes |
def assert_shape_equal(shape_a, shape_b): """Asserts that shape_a and shape_b are equal. If the shapes are static, raises a ValueError when the shapes mismatch. If the shapes are dynamic, raises a tf InvalidArgumentError when the shapes mismatch. Args: shape_a: a list containing shape of the first tensor. shape_b: a list containing shape of the second tensor. Returns: Either a tf.no_op() when shapes are all static and a tf.assert_equal() op when the shapes are dynamic. Raises: ValueError: When shapes are both static and unequal. """ if (all(isinstance(dim, int) for dim in shape_a) and all(isinstance(dim, int) for dim in shape_b)): if shape_a != shape_b: raise ValueError('Unequal shapes {}, {}'.format(shape_a, shape_b)) else: return tf.no_op() else: return tf.assert_equal(shape_a, shape_b)
Example #26
Source File: 1_simple_boston.py From deep-learning-note with MIT License | 5 votes |
def build_mixture_weights_train_op(self, loss, var_list, logits, labels, iteration_step, summary): """See `adanet.subnetwork.Builder`.""" if not self._learn_mixture_weights: return tf.no_op() return self._optimizer.minimize(loss=loss, var_list=var_list)
Example #27
Source File: shape_utils.py From vehicle_counting_tensorflow with MIT License | 5 votes |
def assert_shape_equal_along_first_dimension(shape_a, shape_b): """Asserts that shape_a and shape_b are the same along the 0th-dimension. If the shapes are static, raises a ValueError when the shapes mismatch. If the shapes are dynamic, raises a tf InvalidArgumentError when the shapes mismatch. Args: shape_a: a list containing shape of the first tensor. shape_b: a list containing shape of the second tensor. Returns: Either a tf.no_op() when shapes are all static and a tf.assert_equal() op when the shapes are dynamic. Raises: ValueError: When shapes are both static and unequal. """ if isinstance(shape_a[0], int) and isinstance(shape_b[0], int): if shape_a[0] != shape_b[0]: raise ValueError('Unequal first dimension {}, {}'.format( shape_a[0], shape_b[0])) else: return tf.no_op() else: return tf.assert_equal(shape_a[0], shape_b[0])
Example #28
Source File: model.py From rgn with MIT License | 5 votes |
def _accumulate_loss(config, numerator, denominator, name_prefix=''): """ Constructs ops to accumulate and reduce loss and maintain a memory of lowest loss achieved """ if config['num_evaluation_invocations'] == 1: # return simple loss accumulated_loss = tf.divide(numerator, denominator, name=name_prefix) update_op = reduce_op = tf.no_op() else: # create accumulator variables. note that tf.Variable uses name_scope (not variable_scope) for naming, which is what's desired in this instance numerator_accumulator = tf.Variable(initial_value=0., trainable=False, name=name_prefix + '_numerator_accumulator') denominator_accumulator = tf.Variable(initial_value=0., trainable=False, name=name_prefix + '_denominator_accumulator') # accumulate with tf.control_dependencies([numerator, denominator, numerator_accumulator, denominator_accumulator]): accumulate_numerator = tf.assign_add(numerator_accumulator, numerator) accumulate_denominator = tf.assign_add(denominator_accumulator, denominator) update_op = tf.group(accumulate_numerator, accumulate_denominator, name=name_prefix + '_accumulate_op') # divide to get final quotient with tf.control_dependencies([update_op]): accumulated_loss = tf.divide(numerator_accumulator, denominator_accumulator, name=name_prefix + '_accumulated') # zero accumulators with tf.control_dependencies([accumulated_loss]): zero_numerator = tf.assign(numerator_accumulator, 0.) zero_denominator = tf.assign(denominator_accumulator, 0.) reduce_op = tf.group(zero_numerator, zero_denominator, name=name_prefix + '_reduce_op') min_loss_achieved = tf.Variable(initial_value=float('inf'), trainable=False, name='min_' + name_prefix + '_achieved') min_loss_op = tf.assign(min_loss_achieved, tf.reduce_min([min_loss_achieved, accumulated_loss]), name='min_' + name_prefix + '_achieved_op') with tf.control_dependencies([min_loss_op]): min_loss_achieved = tf.identity(min_loss_achieved) return accumulated_loss, min_loss_achieved, min_loss_op, update_op, reduce_op
Example #29
Source File: model_deploy_test.py From ctw-baseline with MIT License | 5 votes |
def testMultiGPUPS(self): deploy_config = model_deploy.DeploymentConfig(num_clones=2, num_ps_tasks=1) self.assertEqual(deploy_config.caching_device()(tf.no_op()), '') self.assertDeviceEqual(deploy_config.clone_device(0), '/job:worker/device:GPU:0') self.assertDeviceEqual(deploy_config.clone_device(1), '/job:worker/device:GPU:1') self.assertEqual(deploy_config.clone_scope(0), 'clone_0') self.assertEqual(deploy_config.clone_scope(1), 'clone_1') self.assertDeviceEqual(deploy_config.optimizer_device(), '/job:worker/device:CPU:0') self.assertDeviceEqual(deploy_config.inputs_device(), '/job:worker/device:CPU:0')
Example #30
Source File: model.py From CycleGAN-TensorFlow with MIT License | 5 votes |
def optimize(self, G_loss, D_Y_loss, F_loss, D_X_loss): def make_optimizer(loss, variables, name='Adam'): """ Adam optimizer with learning rate 0.0002 for the first 100k steps (~100 epochs) and a linearly decaying rate that goes to zero over the next 100k steps """ global_step = tf.Variable(0, trainable=False) starter_learning_rate = self.learning_rate end_learning_rate = 0.0 start_decay_step = 100000 decay_steps = 100000 beta1 = self.beta1 learning_rate = ( tf.where( tf.greater_equal(global_step, start_decay_step), tf.train.polynomial_decay(starter_learning_rate, global_step-start_decay_step, decay_steps, end_learning_rate, power=1.0), starter_learning_rate ) ) tf.summary.scalar('learning_rate/{}'.format(name), learning_rate) learning_step = ( tf.train.AdamOptimizer(learning_rate, beta1=beta1, name=name) .minimize(loss, global_step=global_step, var_list=variables) ) return learning_step G_optimizer = make_optimizer(G_loss, self.G.variables, name='Adam_G') D_Y_optimizer = make_optimizer(D_Y_loss, self.D_Y.variables, name='Adam_D_Y') F_optimizer = make_optimizer(F_loss, self.F.variables, name='Adam_F') D_X_optimizer = make_optimizer(D_X_loss, self.D_X.variables, name='Adam_D_X') with tf.control_dependencies([G_optimizer, D_Y_optimizer, F_optimizer, D_X_optimizer]): return tf.no_op(name='optimizers')