aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/cudnn_rnn
diff options
context:
space:
mode:
authorGravatar James Qin <jamesqin@google.com>2018-02-06 16:25:59 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-02-06 16:29:36 -0800
commit0282f080fa0555a0f4af1a0293e529327d09b153 (patch)
tree09c7ac64c2b7c1d21dcc4b3237f065bdc52ebd92 /tensorflow/contrib/cudnn_rnn
parent901d119b938d9ff4239f27fbede488ae3d05d598 (diff)
Address Adagrad/RMSProp incompatibility with CudnnRNN
CudnnRNN layers have variables of unknown shapes, which Adagrad/RMSProp didn't handle before. This fixes 6620(#6620). PiperOrigin-RevId: 184759579
Diffstat (limited to 'tensorflow/contrib/cudnn_rnn')
-rw-r--r--tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_test.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_test.py b/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_test.py
index 49d305cb0d..9897c31a98 100644
--- a/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_test.py
+++ b/tensorflow/contrib/cudnn_rnn/python/kernel_tests/cudnn_rnn_test.py
@@ -51,7 +51,11 @@ from tensorflow.python.ops.losses import losses
from tensorflow.python.platform import googletest
from tensorflow.python.platform import test
from tensorflow.python.platform import tf_logging as logging
+from tensorflow.python.training import adagrad
+from tensorflow.python.training import adam
from tensorflow.python.training import gradient_descent
+from tensorflow.python.training import momentum
+from tensorflow.python.training import rmsprop
from tensorflow.python.training import saver as saver_lib
@@ -316,6 +320,55 @@ class CudnnRNNTestBasic(TensorFlowTestCase):
self.assertEqual(0, total_sum2_v)
self.assertEqual(0, total_sum3_v)
+ @unittest.skipUnless(test.is_built_with_cuda(),
+ "Test only applicable when running on GPUs")
+ def testOptimizersSupport(self):
+ for opt in ("adagrad", "adam", "rmsprop", "momentum", "sgd"):
+ self._TestOptimizerSupportHelper(opt)
+
+ def _GetOptimizer(self, opt):
+ if opt == "adagrad":
+ return adagrad.AdagradOptimizer(learning_rate=1e-2)
+ elif opt == "adam":
+ return adam.AdamOptimizer(learning_rate=1e-2)
+ elif opt == "rmsprop":
+ return rmsprop.RMSPropOptimizer(learning_rate=1e-2)
+ elif opt == "momentum":
+ return momentum.MomentumOptimizer(learning_rate=1e-2, momentum=0.9)
+ elif opt == "sgd":
+ return gradient_descent.GradientDescentOptimizer(learning_rate=1e-2)
+ else:
+ raise ValueError("Unsupported optimizer: %s" % opt)
+
+ def _TestOptimizerSupportHelper(self, opt):
+ num_layers = 4
+ num_units = 2
+ batch_size = 8
+ direction = CUDNN_RNN_UNIDIRECTION
+ dir_count = 1
+
+ with ops.Graph().as_default() as g:
+ kernel_initializer = init_ops.constant_initializer(0.)
+ bias_initializer = init_ops.constant_initializer(0.)
+ inputs = random_ops.random_uniform([
+ num_layers * dir_count, batch_size, num_units], dtype=dtypes.float32)
+
+ lstm = cudnn_rnn.CudnnLSTM(num_layers, num_units,
+ direction=direction,
+ kernel_initializer=kernel_initializer,
+ bias_initializer=bias_initializer,
+ name="awesome_lstm")
+ outputs, _ = lstm(inputs)
+ loss = math_ops.reduce_sum(outputs)
+ optimizer = self._GetOptimizer(opt)
+ train_op = optimizer.minimize(loss)
+
+ with self.test_session(use_gpu=True, graph=g) as sess:
+ sess.run(variables.global_variables_initializer())
+ sess.run(train_op)
+
+ @unittest.skipUnless(test.is_built_with_cuda(),
+ "Test only applicable when running on GPUs")
def testSaveableGraphDeviceAssignment(self):
num_layers = 4
num_units = 2