aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/python/kernel_tests/reduction_ops_test.py
diff options
context:
space:
mode:
authorGravatar Vijay Vasudevan <vrv@google.com>2015-12-01 13:26:53 -0800
committerGravatar Vijay Vasudevan <vrv@google.com>2015-12-01 13:26:53 -0800
commit795f35da2d458cbae477ac2fe2bff80c1427a771 (patch)
treefd17153d79e388c1c017c33eb8bfcf70b0d929fb /tensorflow/python/kernel_tests/reduction_ops_test.py
parent3972c791b9f4d9a61b9ad6399b481df396f359ff (diff)
TensorFlow: upstream changes to git
Change: Clean up documentation for ReverseSequence Change: Updated several tensorflow operations to use 32bit indices on GPU. Change: Add attribute batch_dim to ReverseSequenceOp. Change: Fix error in convert_to_records.py. As reported in https://github.com/tensorflow/tensorflow/issues/370 by AlexUnderMicrocontRoll. Change: Update TensorBoard README. Change: Fixes to boolean flags reported in https://github.com/tensorflow/tensorflow/issues/379. Supports: --bool_flag=True --> True --bool_flag=False --> False --bool_flag=gibberish --> False --bool_flag --> True --nobool_flag --> False Fixes #379 Change: Update generated Op docs. Change: Enable local development of TensorBoard using gulp Also make tf-tensorboard a regular component rather than special case This is mostly effected by creating tfserve.js, which is a small server with clever routing to load from bower_components/ and components/ using the paths that work within google3. Workflow: `gulp serve` Change: Add a full working code example to the tensorboard and summaries tutorial Change: Fix seq2seq_test when running on GPU. The "proj_w" and "proj_b" variables were being created before the `test_session()`'s device function took effect, which pushed the placement algorithm into making an incorrect decision. Change: Add a sentence in TensorBoard README on how to serialize summary data to logs and provide link to the how-to tutorial on the TensorFlow website. Change: Add error-catching code if string_input_producer is supplied a null input. Before this change, it would die with an opaque shape error from inside the queue. This change catches (most) python null lists being passed directly in, and at runtime detects null tensors. Adds two tests for this to input_test.py Change: Speed up for models that use the same variable multiple times in the case where variables must be copied across devices: - Have Variables wrap the Variable op in an Identity op when converted to Tensor. This avoids multiple copies across devices if a variable is used multiple time in a computation. - Add Variable.mutable() to return the non-wrapped Variable op for used when assigning new values. - Add an as_ref parameter to convert_to_tensor() to allow code to specify if they plan to assign a new value to the result of the conversion. Make Variable return the result of Variable.mutable() when as_ref is True. - Make all ops that assign values to variables pass as_ref=True when converting their arguments. Change: Change to reduce critical section times in gpu_event_mgr.h: (1) Call stream->ThenRecordEvent outside the EventMgr critical section (2) Do memory deallocation outside the critical section Speeds up one configuration of ptb_word_lm from 2924 words per second (wps) to 3278 wps on my desktop machine with a Titan X. Change: Remove some colons that break the open source build ::tensorflow::StringPiece breaks for @raingo, see https://github.com/tensorflow/tensorflow/issues/358. tensorflow::StringPiece (without the leading colons) seems to fix the problem. Change: Added check that inputs to Operation is a list and make a defensive copy of the input. This is for cases where the input list is changed such as in _add_input. Change: Use standard names for TensorFlow dtypes in the tutorial. Change: Add tests for tensor inputs. Change: Fix build after declaring more types for ops Change: Switch to 32 bit indexing to speedup convolutions and concatenations. Change: Add convert_image op to convert between types for images (similar to OpenCV's cvtScale). Change: Make cast work between numeric types (bool, uint8, int16, int32, int64, float, double). Change: Padding input data for odd number of paddings, so we can use cudnn anyway. + Fix total padding computation when padding==VALID. + This CL makes the Googlenet benchmark run 5x faster. Change: Support IndexedSlices in ConcatGrad Change: * sampled softmax op uses one embedding lookup for positive and negative samples * float64 support for sampled softmax Change: Move RNN code out of models.rnn (without breaking existing code). The API may still undergo minor changes, until full documentation as added. Change: Changed to use per-step stacks for the accumulators used in while-loop gradient computation. This addresses the problem caused by using concat without sufficient static shape information. It should also improve performance as we avoided those expensive concats. Change: Update generated Op docs. Change: Improve error messages when the optimizer finds no variables to minimize or when none of the variables has gradients. Change: Say that -1 isn't just for flattening in reshape docs Also add scalar reshape (reshape(t, [])) as an example. This fixes https://github.com/tensorflow/tensorflow/issues/281. Change: This is a test. Base CL: 109118714
Diffstat (limited to 'tensorflow/python/kernel_tests/reduction_ops_test.py')
-rw-r--r--tensorflow/python/kernel_tests/reduction_ops_test.py134
1 files changed, 96 insertions, 38 deletions
diff --git a/tensorflow/python/kernel_tests/reduction_ops_test.py b/tensorflow/python/kernel_tests/reduction_ops_test.py
index afb437ea3c..3867034dc1 100644
--- a/tensorflow/python/kernel_tests/reduction_ops_test.py
+++ b/tensorflow/python/kernel_tests/reduction_ops_test.py
@@ -24,7 +24,6 @@ import numpy as np
import tensorflow as tf
from tensorflow.python.framework import tensor_shape
-from tensorflow.python.kernel_tests import gradient_checker
class SumReductionTest(tf.test.TestCase):
@@ -150,13 +149,12 @@ class SumReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_sum(t, reduction_axes)
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t,
- shape,
- su,
- sum_shape,
- x_init_value=x,
- delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ shape,
+ su,
+ sum_shape,
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient(self):
@@ -211,18 +209,30 @@ class MeanReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_mean(t, [1, 2])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-3, atol=1e-3)
su = tf.reduce_mean(t, [0, 1, 2, 3])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [1], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [1],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-3, atol=1e-3)
su = tf.reduce_mean(t, [])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 3, 4, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 3, 4, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-3, atol=1e-3)
@@ -269,18 +279,30 @@ class ProdReductionTest(tf.test.TestCase):
t = tf.convert_to_tensor(x)
su = tf.reduce_prod(t, [])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 3, 4, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 3, 4, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-3, atol=1e-3)
su = tf.reduce_prod(t, [1, 2])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-3, atol=1e-3)
su = tf.reduce_prod(t, [0, 1, 2, 3])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [1], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [1],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-3, atol=1e-3)
# NOTE(kearnes): the current gradient calculation gives NaNs for 0 inputs
@@ -288,8 +310,12 @@ class ProdReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_prod(t, [])
- jacob_t, _ = gradient_checker.ComputeGradient(
- t, s, su, [2, 3, 4, 2], x_init_value=x, delta=1)
+ jacob_t, _ = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 3, 4, 2],
+ x_init_value=x,
+ delta=1)
with self.assertRaisesOpError("Tensor had NaN values"):
tf.check_numerics(jacob_t, message="_ProdGrad NaN test").op.run()
@@ -336,8 +362,12 @@ class MinReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_min(t, [1, 2])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient2(self):
@@ -346,8 +376,12 @@ class MinReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_min(t, [1])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 4, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 4, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient3(self):
@@ -356,8 +390,12 @@ class MinReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_min(t, [2])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 3, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 3, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient4(self):
@@ -366,8 +404,12 @@ class MinReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_min(t)
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [1], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [1],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
@@ -414,8 +456,12 @@ class MaxReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_max(t, [1, 2])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient2(self):
@@ -424,8 +470,12 @@ class MaxReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_max(t, [1])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 4, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 4, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient3(self):
@@ -434,8 +484,12 @@ class MaxReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_max(t, [2])
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [2, 3, 2], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [2, 3, 2],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)
def testGradient4(self):
@@ -444,8 +498,12 @@ class MaxReductionTest(tf.test.TestCase):
with self.test_session():
t = tf.convert_to_tensor(x)
su = tf.reduce_max(t)
- jacob_t, jacob_n = gradient_checker.ComputeGradient(
- t, s, su, [1], x_init_value=x, delta=1)
+ jacob_t, jacob_n = tf.test.compute_gradient(t,
+ s,
+ su,
+ [1],
+ x_init_value=x,
+ delta=1)
self.assertAllClose(jacob_t, jacob_n, rtol=1e-8, atol=1e-8)