Python tensorflow.python.ops.gradients_impl.gradients() Examples
The following are 30
code examples of tensorflow.python.ops.gradients_impl.gradients().
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.python.ops.gradients_impl
, or try the search function
.
Example #1
Source File: lstm1d_test.py From keras-lambda with MIT License | 6 votes |
def testSequenceToSequenceGradientReverse(self): with self.test_session(): size = (17, 1, 15) output_size = (17, 1, 8) inputs = constant_op.constant(_rand(*size)) outputs = lstm1d.ndlstm_base(inputs, 8, reverse=1, dynamic=False) variables.global_variables_initializer().run() if 1: # pylint: disable=using-constant-test gradients = gradients_impl.gradients(outputs, inputs)[0].eval() self.assertEqual(gradients.shape, size) else: # TODO(tmb) tf.test.compute_gradient error is currently broken # with dynamic_rnn. Enable this test case eventually. err = gradient_checker.compute_gradient_error( inputs, size, outputs, output_size, delta=1e-4) self.assert_(not np.isnan(err)) self.assert_(err < 0.1)
Example #2
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def _Conv2DBackpropInputGrad(op, grad): """The derivatives for deconvolution. Args: op: the Deconvolution op. grad: the tensor representing the gradient w.r.t. the output Returns: the gradients w.r.t. the input and the filter """ return [None, nn_ops.conv2d_backprop_filter(grad, array_ops.shape(op.inputs[1]), op.inputs[2], op.get_attr("strides"), op.get_attr("padding"), op.get_attr("use_cudnn_on_gpu"), op.get_attr("data_format")), nn_ops.conv2d(grad, op.inputs[1], op.get_attr("strides"), op.get_attr("padding"), op.get_attr("use_cudnn_on_gpu"), op.get_attr("data_format"))]
Example #3
Source File: rev_block_lib_test.py From tf-slim with Apache License 2.0 | 6 votes |
def testDoubleCallInUniqueScope(self): @rev_block_lib.recompute_grad def layer_with_recompute(inputs): with variable_scope.variable_scope("inner", use_resource=True): return core_layers.dense(inputs, 2) with variable_scope.variable_scope("layer", use_resource=True): inputs = array_ops.ones((2, 4), dtypes.float32) with variable_scope.variable_scope("layer1", use_resource=True): out1 = layer_with_recompute(inputs) with variable_scope.variable_scope("layer2", use_resource=True): out2 = layer_with_recompute(inputs) + out1 out = math_ops.reduce_sum(out2) tvars = variables.trainable_variables() assert len(tvars) == 4 grads = gradients_impl.gradients(out, [inputs] + tvars) for grad in grads: self.assertIsNotNone(grad)
Example #4
Source File: rev_block_lib_test.py From tf-slim with Apache License 2.0 | 6 votes |
def testDoubleCallInSameScopeFails(self): @rev_block_lib.recompute_grad def layer_with_recompute(inputs): return core_layers.dense(inputs, 2) with variable_scope.variable_scope("layer", use_resource=True): inputs = array_ops.ones((2, 4), dtypes.float32) out1 = layer_with_recompute(inputs) out2 = layer_with_recompute(inputs) + out1 out = math_ops.reduce_sum(out2) tvars = variables.trainable_variables() assert len(tvars) == 4 with self.assertRaisesWithPredicateMatch( ValueError, "called twice in the same enclosing scope"): gradients_impl.gradients(out, [inputs] + tvars)
Example #5
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def _BiasAddGrad(op, received_grad): """Return the gradients for the 2 inputs of bias_op. The first input of unused_bias_op is the tensor t, and its gradient is just the gradient the unused_bias_op received. The second input of unused_bias_op is the bias vector which has one fewer dimension than "received_grad" (the batch dimension.) Its gradient is the received gradient Summed on the batch dimension, which is the first dimension. Args: op: The BiasOp for which we need to generate gradients. received_grad: Tensor. The gradients passed to the BiasOp. Returns: Two tensors, the first one for the "tensor" input of the BiasOp, the second one for the "bias" input of the BiasOp. """ try: data_format = op.get_attr("data_format") except ValueError: data_format = None return (received_grad, gen_nn_ops.bias_add_grad(out_backprop=received_grad, data_format=data_format))
Example #6
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def _BiasAddGradV1(unused_bias_op, received_grad): """Return the gradients for the 2 inputs of bias_op. The first input of unused_bias_op is the tensor t, and its gradient is just the gradient the unused_bias_op received. The second input of unused_bias_op is the bias vector which has one fewer dimension than "received_grad" (the batch dimension.) Its gradient is the received gradient Summed on the batch dimension, which is the first dimension. Args: unused_bias_op: The BiasOp for which we need to generate gradients. received_grad: Tensor. The gradients passed to the BiasOp. Returns: Two tensors, the first one for the "tensor" input of the BiasOp, the second one for the "bias" input of the BiasOp. """ reduction_dim_tensor = math_ops.range(array_ops.rank(received_grad) - 1) return (received_grad, math_ops.reduce_sum(received_grad, reduction_dim_tensor))
Example #7
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def _FractionalMaxPoolGrad(op, grad_0, unused_grad_1, unused_grad_2): """Returns gradient for FractionalMaxPool. Since FractionalMaxPool has three outputs, there are three gradients passed in for each of the outputs. Only the first one is useful, the other two gradients are empty. Args: op: The FractionalMaxPoolOp. grad_0: Gradient with respect to op.outputs[0] unused_grad_1: Gradient with respect to op.outputs[1]/row_seq. It is empty. unused_grad_2: Gradient with respect to op.outputs[2]/col_seq. It is empty. Returns: Input backprop for FractionalMaxPool op. """ # pylint: disable=protected-access return gen_nn_ops._fractional_max_pool_grad(op.inputs[0], op.outputs[0], grad_0, op.outputs[1], op.outputs[2], op.get_attr("overlapping"))
Example #8
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def _FractionalAvgPoolGrad(op, grad_0, unused_grad_1, unused_grad_2): """Returns gradient for FractionalAvgPool. Since FractionalAvgPool has three outputs, there are three gradients passed in for each of the outputs. Only the first one is useful, the other two gradients are empty. Args: op: The FractionalAvgPoolOp. grad_0: Gradient with respect to op.outputs[0] unused_grad_1: Gradient with respect to op.outputs[1]/row_seq. It is empty. unused_grad_2: Gradient with respect to op.outputs[2]/col_seq. It is empty. Returns: Input backprop for FractionalAvgPool op. """ # pylint: disable=protected-access return gen_nn_ops._fractional_avg_pool_grad(op.inputs[0].get_shape(), grad_0, op.outputs[1], op.outputs[2], op.get_attr("overlapping"))
Example #9
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 6 votes |
def _BatchNormWithGlobalNormalizationGrad(op, grad): """Return the gradients for the 5 inputs of BatchNormWithGlobalNormalization. We do not backprop anything for the mean and var intentionally as they are not being trained with backprop in the operation. Args: op: The BatchNormOp for which we need to generate gradients. grad: Tensor. The gradients passed to the BatchNormOp. Returns: dx: Backprop for input, which is (grad * (g * rsqrt(v + epsilon))) dm: Backprop for mean, which is sum_over_rest(grad * g) * (-1 / rsqrt(v + epsilon)) dv: Backprop for variance, which is sum_over_rest(grad * g * (x - m)) * (-1/2) * (v + epsilon) ^ (-3/2) db: Backprop for beta, which is grad reduced in all except the last dimension. dg: Backprop for gamma, which is (grad * ((x - m) * rsqrt(v + epsilon))) """ dx, dm, dv, db, dg = gen_nn_ops._batch_norm_with_global_normalization_grad( op.inputs[0], op.inputs[1], op.inputs[2], op.inputs[4], grad, op.get_attr("variance_epsilon"), op.get_attr("scale_after_normalization")) return dx, dm, dv, db, dg
Example #10
Source File: lstm1d_test.py From auto-alt-text-lambda-api with MIT License | 6 votes |
def testSequenceToSequenceGradientReverse(self): with self.test_session(): size = (17, 1, 15) output_size = (17, 1, 8) inputs = constant_op.constant(_rand(*size)) outputs = lstm1d.ndlstm_base(inputs, 8, reverse=1, dynamic=False) variables.global_variables_initializer().run() if 1: # pylint: disable=using-constant-test gradients = gradients_impl.gradients(outputs, inputs)[0].eval() self.assertEqual(gradients.shape, size) else: # TODO(tmb) tf.test.compute_gradient error is currently broken # with dynamic_rnn. Enable this test case eventually. err = gradient_checker.compute_gradient_error( inputs, size, outputs, output_size, delta=1e-4) self.assert_(not np.isnan(err)) self.assert_(err < 0.1)
Example #11
Source File: lstm1d_test.py From auto-alt-text-lambda-api with MIT License | 6 votes |
def testSequenceToSequenceGradient(self): with self.test_session(): size = (17, 1, 15) output_size = (17, 1, 8) inputs = constant_op.constant(_rand(*size)) outputs = lstm1d.ndlstm_base(inputs, 8, dynamic=False) variables.global_variables_initializer().run() gradients = gradients_impl.gradients(outputs, inputs) if 1: # pylint: disable=using-constant-test gradients = gradients_impl.gradients(outputs, inputs)[0].eval() self.assertEqual(gradients.shape, size) else: # TODO(tmb) tf.test.compute_gradient error is currently broken # with dynamic_rnn. Enable this test case eventually. err = gradient_checker.compute_gradient_error( inputs, size, outputs, output_size, delta=1e-4) self.assert_(not np.isnan(err)) self.assert_(err < 0.1)
Example #12
Source File: batch_ops_test.py From lambda-packs with MIT License | 6 votes |
def testUnbatchGrad(self): """Tests that batch and unbatch are differentiable.""" with self.test_session() as sess: inp = array_ops.placeholder(dtype=dtypes.int32, shape=[1]) batched, index, id_t = batch_ops.batch( [inp], num_batch_threads=1, max_batch_size=2, batch_timeout_micros=36000000, grad_timeout_micros=1000000, batching_queue="") computation = batched[0] * batched[0] result = batch_ops.unbatch(computation, index, id_t, timeout_micros=1000000, shared_name="unbatch") grad = gradients_impl.gradients(result, inp) thread_results = [] def worker(): thread_results.extend(sess.run([grad], feed_dict={inp: [1]})) worker_thread = threading.Thread(target=worker) worker_thread.start() main_results = sess.run([grad], feed_dict={inp: [2]}) worker_thread.join() self.assertEqual(thread_results[0], [2]) self.assertEqual(main_results[0], [4])
Example #13
Source File: lstm1d_test.py From keras-lambda with MIT License | 6 votes |
def testSequenceToSequenceGradient(self): with self.test_session(): size = (17, 1, 15) output_size = (17, 1, 8) inputs = constant_op.constant(_rand(*size)) outputs = lstm1d.ndlstm_base(inputs, 8, dynamic=False) variables.global_variables_initializer().run() gradients = gradients_impl.gradients(outputs, inputs) if 1: # pylint: disable=using-constant-test gradients = gradients_impl.gradients(outputs, inputs)[0].eval() self.assertEqual(gradients.shape, size) else: # TODO(tmb) tf.test.compute_gradient error is currently broken # with dynamic_rnn. Enable this test case eventually. err = gradient_checker.compute_gradient_error( inputs, size, outputs, output_size, delta=1e-4) self.assert_(not np.isnan(err)) self.assert_(err < 0.1)
Example #14
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def _L2LossGrad(op, grad): """Return the gradients for L2Loss. Args: op: The L2LossOp for which we need to generate gradients. grad: Tensor containing a single number. Returns: The gradient, which is (x * grad). """ return op.inputs[0] * grad
Example #15
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def _TopKGrad(op, grad, _): """Return the gradients for TopK. Args: op: The TopKOp for which we need to generate gradients. grad: Tensor. The gradients passed to the TopKOp. Returns: A list of two tensors, the first being the gradient w.r.t to the input and TopK, and the second being the gradient w.r.t. to the indices (all zero). """ in_shape = array_ops.shape(op.inputs[0]) ind_shape = array_ops.shape(op.outputs[1]) ind_lastdim = array_ops.gather(ind_shape, array_ops.size(ind_shape) - 1) # Flatten indices to 2D. ind_2d = array_ops.reshape(op.outputs[1], array_ops.stack([-1, ind_lastdim])) in_lastdim = array_ops.gather(in_shape, array_ops.size(in_shape) - 1) outerdim = array_ops.shape(ind_2d)[0] # Compute linear indices (flattened to 1D). ind = array_ops.reshape(ind_2d + array_ops.expand_dims( math_ops.range(0, outerdim * in_lastdim, in_lastdim), -1), [-1]) # Substitute grad to appropriate locations and fill the rest with zeros, # finally reshaping it to the original input shape. return [array_ops.reshape( sparse_ops.sparse_to_dense(ind, array_ops.reshape( math_ops.reduce_prod(in_shape), [1]), array_ops.reshape(grad, [-1]), validate_indices=False), in_shape), array_ops.zeros( [], dtype=dtypes.int32)]
Example #16
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def _SparseSoftmaxCrossEntropyWithLogitsGrad(op, grad_0, _): """Gradient function for SparseSoftmaxCrossEntropyWithLogits.""" # grad_0 is the backprop for cost, and we multiply it with the gradients # (which is output[1]) # There is no gradient for the labels # # Currently there is no way to take the second derivative of this op # due to the fused implementation's interaction with tf.gradients(), # so we make sure we prevent silently incorrect results by raising # an error if the second derivative is requested via prevent_gradient. sparse_softmax_grad_without_gradient = array_ops.prevent_gradient( op.outputs[1], message="Currently there is no way to take the second " "derivative of sparse_softmax_cross_entropy_with_logits due to the fused " "implementation's interaction with tf.gradients()") return _BroadcastMul(grad_0, sparse_softmax_grad_without_gradient), None
Example #17
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def _BiasAddGradGrad(op, received_grad): """Gradient for the BiasAddGrad op. Args: op: BiasAddGrad op for which we are calculating gradients. received_grad: The gradients passed to the BiasAddGrad op. Returns: A single gradient Tensor for the input to BiasAddGrad (which is the gradient of the bias term in BiasAdd) """ try: data_format = op.get_attr("data_format") except ValueError: data_format = None shape = array_ops.shape(op.inputs[0]) rank = array_ops.rank(op.inputs[0]) bias_shape = array_ops.shape(received_grad) if data_format == b"NCHW": expanded_shape = array_ops.concat([ array_ops.ones_like(shape[:-3]), bias_shape, array_ops.ones_like(shape[-2:]) ], 0) tile_mults = array_ops.concat([shape[:-3], [1], shape[-2:]], 0) else: expanded_shape = array_ops.concat( [array_ops.ones_like(shape[:-1]), bias_shape], 0) tile_mults = array_ops.concat([shape[:-1], [1]], 0) expanded_grad = array_ops.reshape(received_grad, expanded_shape) return array_ops.tile(expanded_grad, tile_mults)
Example #18
Source File: nn_grad.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def _LogSoftmaxGrad(op, grad): """The gradient for log_softmax. log_softmax = input - log(sum(exp(input)) dlog_softmax/dinput = diag - softmax(input) Args: op: The log softmax op. grad: The tensor representing the gradient w.r.t. the output. Returns: The gradients w.r.t. the input. """ softmax = math_ops.exp(op.outputs[0]) return grad - math_ops.reduce_sum(grad, 1, keep_dims=True) * softmax
Example #19
Source File: function.py From Serverless-Deep-Learning-with-TensorFlow-and-AWS-Lambda with MIT License | 5 votes |
def _compute_backprop(self): """Computes the backprop function object for this function.""" self._has_backprop = True with self._graph.as_default(), context.graph_mode(): c = _CapturingContext() with c: filtered_outputs = [ x for x in self._returns if x is not None ] self._out_grad_placeholders = [ graph_placeholder(x.dtype, x.shape) for x in filtered_outputs ] in_gradients = gradients_impl.gradients( filtered_outputs, self._input_placeholders, grad_ys=self._out_grad_placeholders) shapes = [x.shape for x in in_gradients if x is not None] captures = list(sorted(c.captured_tensors, key=lambda x: x.name)) forward_function_def = make_function_def( self._graph, self._ops, self._input_placeholders, filtered_outputs + captures) self._forward_fdef = _DefinedFunction(forward_function_def) _register_with_name(_forward_name(self._func_name), forward_function_def) backward_outputs = [x for x in in_gradients if x is not None] all_inputs = self._out_grad_placeholders + captures backward_function_def = make_function_def( self._graph, [x.op for x in self._out_grad_placeholders ] + list(sorted(c.known_ops, key=lambda x: x.name)), all_inputs, backward_outputs) _register_with_name(_backward_name(self._func_name), backward_function_def) self._backward_function = _GraphModeFunction( all_inputs, [], backward_function_def, self._graph, c.known_ops, in_gradients, _map_sequence_obj_to_idx(backward_outputs), shapes)
Example #20
Source File: rev_block_lib_test.py From tf-slim with Apache License 2.0 | 5 votes |
def testWithIsRecomputeKwarg(self): kwarg_values = [] @rev_block_lib.recompute_grad def layer_with_recompute(inputs, is_recomputing=False): kwarg_values.append(is_recomputing) out = core_layers.dense(inputs, 2) out = normalization_layers.batch_normalization(out, training=True) if is_recomputing: # Ensure that the updates are not duplicated by popping off the latest # 2 additions. update_ops = ops.get_collection_ref(ops.GraphKeys.UPDATE_OPS) update_ops.pop() update_ops.pop() return out x = array_ops.ones((2, 4), dtypes.float32) with variable_scope.variable_scope("layer1", use_resource=True): y = layer_with_recompute(x) loss = math_ops.reduce_sum(y) tvars = variables.trainable_variables() gradients_impl.gradients(loss, [x] + tvars) update_ops = ops.get_collection(ops.GraphKeys.UPDATE_OPS) self.assertEqual(2, len(update_ops)) self.assertEqual([False, True], kwarg_values)
Example #21
Source File: estimator.py From noisy-K-FAC with Apache License 2.0 | 5 votes |
def _get_grads_lists_empirical(self, tensors): grads_flat = gradients_impl.gradients( self._layers.total_loss(), nest.flatten(tensors), colocate_gradients_with_ops=self._colocate_gradients_with_ops) grads_all = nest.pack_sequence_as(tensors, grads_flat) return tuple((grad,) for grad in grads_all)
Example #22
Source File: estimator.py From noisy-K-FAC with Apache License 2.0 | 5 votes |
def _get_grads_lists_gradients(self, tensors): grads_flat = gradients_impl.gradients( self._layers.total_sampled_loss(), nest.flatten(tensors), colocate_gradients_with_ops=self._colocate_gradients_with_ops) grads_all = nest.pack_sequence_as(tensors, grads_flat) return tuple((grad,) for grad in grads_all)
Example #23
Source File: layers_test.py From tf-slim with Apache License 2.0 | 5 votes |
def testBasic(self): with self.cached_session(): x = np.array([42], np.float32) gradient_scale = np.array([2], np.float32) x = ops.convert_to_tensor(x) y = layers_lib.scale_gradient(x, gradient_scale) np.testing.assert_array_equal(x.eval(), y.eval()) g_x, = gradients_impl.gradients(y, [x], [np.array([3], np.float32)]) np.testing.assert_array_equal([3 * 2], g_x.eval())
Example #24
Source File: test_patch_bias_add.py From framework-determinism with Apache License 2.0 | 5 votes |
def _testGradient(self, np_input, bias, dtype, data_format, use_gpu): with self.cached_session(use_gpu=use_gpu): if data_format == "NCHW": np_input = self._NHWCToNCHW(np_input) jacob_a, jacob_n = self._computeGradient(np_input, bias, dtype, data_format) input_jacob_a, bias_jacob_a, grad_jacob_a = jacob_a input_jacob_n, bias_jacob_n, grad_jacob_n = jacob_n if dtype == np.float16: # Compare fp16 analytical gradients to fp32 numerical gradients, # since fp16 numerical gradients are too imprecise unless great # care is taken with choosing the inputs and the delta. This is # a weaker, but pragmatic, check (in particular, it does not test # the op itself, only its gradient). _, jacob_n = self._computeGradient(np_input, bias, np.float32, data_format) input_jacob_n, bias_jacob_n, grad_jacob_n = jacob_n if dtype == dtypes.float64: threshold = 1e-10 elif np_input.size >= 512: # The 5e-3 threshold seems to have been marginal in these cases, and # small changes in the test were pushing it over the limit. threshold = 5e-2 else: threshold = 5e-3 self.assertAllClose(input_jacob_a, input_jacob_n, threshold, threshold) self.assertAllClose(bias_jacob_a, bias_jacob_n, threshold, threshold) self.assertAllClose(grad_jacob_a, grad_jacob_n, threshold, threshold)
Example #25
Source File: training_test.py From tf-slim with Apache License 2.0 | 5 votes |
def testClipGrads(self): xs = variables_lib2.Variable(0.0) ys = xs * 4.0 grads = gradients_impl.gradients([ys], [xs]) gradients_to_variables = list(zip(grads, [xs])) clipped_gradients_to_variables = training.clip_gradient_norms( gradients_to_variables, 3.0) with self.cached_session() as session: session.run(variables_lib2.global_variables_initializer()) self.assertAlmostEqual(4.0, gradients_to_variables[0][0].eval()) self.assertAlmostEqual(3.0, clipped_gradients_to_variables[0][0].eval())
Example #26
Source File: training_test.py From tf-slim with Apache License 2.0 | 5 votes |
def testClipGradsFn(self): xs = variables_lib2.Variable(0.0) ys = xs * 4.0 grads = gradients_impl.gradients([ys], [xs]) gradients_to_variables = list(zip(grads, [xs])) clipped_gradients_to_variables = training.clip_gradient_norms_fn(3.0)( gradients_to_variables) with self.cached_session() as session: session.run(variables_lib2.global_variables_initializer()) self.assertAlmostEqual(4.0, gradients_to_variables[0][0].eval()) self.assertAlmostEqual(3.0, clipped_gradients_to_variables[0][0].eval())
Example #27
Source File: rev_block_lib.py From tf-slim with Apache License 2.0 | 5 votes |
def _acc_grads(*lists_of_grads): """Accumulates lists of gradients.""" acc_grads = [] for grads in zip(*lists_of_grads): grads = [g for g in grads if g is not None] if grads: acc_grads.append(math_ops.add_n(grads)) else: acc_grads.append(None) return acc_grads
Example #28
Source File: rev_block_lib.py From tf-slim with Apache License 2.0 | 5 votes |
def _gradients(*args, **kwargs): return (gradients_impl.gradients_v2(*args, **kwargs) if tf2.enabled() else gradients_impl.gradients(*args, **kwargs))
Example #29
Source File: rev_block_lib_test.py From tf-slim with Apache License 2.0 | 5 votes |
def testReuse(self): def f(x): return core_layers.dense(x, self.CHANNELS // 2) def g(x): return core_layers.dense(x, self.CHANNELS // 2) x = random_ops.random_uniform( [self.BATCH_SIZE, self.CHANNELS], dtype=dtypes.float32) x1, x2 = array_ops.split(x, 2, axis=-1) with variable_scope.variable_scope("test"): y1, y2 = rev_block_lib.rev_block(x1, x2, f, g, num_layers=self.NUM_LAYERS) num_vars_before = len(variables.global_variables()) with variable_scope.variable_scope("test", reuse=True): y1, y2 = rev_block_lib.rev_block(x1, x2, f, g, num_layers=self.NUM_LAYERS) num_vars_after = len(variables.global_variables()) self.assertEqual(num_vars_before, num_vars_after) loss = math_ops.reduce_mean(y1 + y2) _ = gradients_impl.gradients(loss, [x] + variables.trainable_variables()) with variable_scope.variable_scope("test", reuse=True): y1, y2 = rev_block_lib.rev_block(x1, x2, f, g, num_layers=self.NUM_LAYERS) num_vars_after = len(variables.global_variables()) self.assertEqual(num_vars_before, num_vars_after)
Example #30
Source File: rev_block_lib.py From tensornets with MIT License | 5 votes |
def _acc_grads(*lists_of_grads): """Accumulates lists of gradients.""" acc_grads = [] for grads in zip(*lists_of_grads): grads = [g for g in grads if g is not None] if grads: acc_grads.append(math_ops.add_n(grads)) else: acc_grads.append(None) return acc_grads