Update tests under keras to use combinations.

1. Change all test_util.run_all_in_graph_and_eager_modes to combination.
2. Replace import tensorflow.python.keras with explicit module import.
3. Update BUILD file to not rely on the overall Keras target.

PiperOrigin-RevId: 300960171
Change-Id: I6ef86a6562aaa363068b2554bb0a2c4bd9ab2e62
This commit is contained in:
Scott Zhu 2020-03-14 15:52:04 -07:00 committed by TensorFlower Gardener
parent 608ea8e583
commit d40ff26630
2 changed files with 42 additions and 29 deletions

View File

@ -540,8 +540,16 @@ tf_py_test(
python_version = "PY3", python_version = "PY3",
tags = ["notsan"], tags = ["notsan"],
deps = [ deps = [
":keras", ":callbacks",
":callbacks_v1",
":combinations",
":testing_utils",
"//tensorflow/python:client_testlib", "//tensorflow/python:client_testlib",
"//tensorflow/python:framework_ops",
"//tensorflow/python:training_lib",
"//tensorflow/python/keras/engine",
"//tensorflow/python/keras/layers",
"//tensorflow/python/keras/utils:np_utils",
"//third_party/py/numpy", "//third_party/py/numpy",
"@absl_py//absl/testing:parameterized", "@absl_py//absl/testing:parameterized",
], ],

View File

@ -22,14 +22,19 @@ import os
import shutil import shutil
import tempfile import tempfile
from absl.testing import parameterized
import numpy as np import numpy as np
from tensorflow.core.framework import summary_pb2 from tensorflow.core.framework import summary_pb2
from tensorflow.python import keras
from tensorflow.python.framework import ops from tensorflow.python.framework import ops
from tensorflow.python.framework import test_util from tensorflow.python.keras import callbacks
from tensorflow.python.keras import callbacks_v1 from tensorflow.python.keras import callbacks_v1
from tensorflow.python.keras import combinations
from tensorflow.python.keras import layers
from tensorflow.python.keras import testing_utils from tensorflow.python.keras import testing_utils
from tensorflow.python.keras.engine import input_layer
from tensorflow.python.keras.engine import sequential
from tensorflow.python.keras.engine import training
from tensorflow.python.keras.utils import np_utils from tensorflow.python.keras.utils import np_utils
from tensorflow.python.platform import test from tensorflow.python.platform import test
from tensorflow.python.training import adam from tensorflow.python.training import adam
@ -43,7 +48,7 @@ NUM_HIDDEN = 5
BATCH_SIZE = 5 BATCH_SIZE = 5
class TestTensorBoardV1(test.TestCase): class TestTensorBoardV1(test.TestCase, parameterized.TestCase):
def test_TensorBoard(self): def test_TensorBoard(self):
np.random.seed(1337) np.random.seed(1337)
@ -77,13 +82,13 @@ class TestTensorBoardV1(test.TestCase):
# case: Sequential # case: Sequential
with ops.Graph().as_default(), self.cached_session(): with ops.Graph().as_default(), self.cached_session():
model = keras.models.Sequential() model = sequential.Sequential()
model.add( model.add(
keras.layers.Dense( layers.Dense(
NUM_HIDDEN, input_dim=INPUT_DIM, activation='relu')) NUM_HIDDEN, input_dim=INPUT_DIM, activation='relu'))
# non_trainable_weights: moving_variance, moving_mean # non_trainable_weights: moving_variance, moving_mean
model.add(keras.layers.BatchNormalization()) model.add(layers.BatchNormalization())
model.add(keras.layers.Dense(NUM_CLASSES, activation='softmax')) model.add(layers.Dense(NUM_CLASSES, activation='softmax'))
model.compile( model.compile(
loss='categorical_crossentropy', loss='categorical_crossentropy',
optimizer='sgd', optimizer='sgd',
@ -184,14 +189,14 @@ class TestTensorBoardV1(test.TestCase):
i += 1 i += 1
i %= max_batch_index i %= max_batch_index
inp1 = keras.Input((INPUT_DIM,)) inp1 = input_layer.Input((INPUT_DIM,))
inp2 = keras.Input((INPUT_DIM,)) inp2 = input_layer.Input((INPUT_DIM,))
inp = keras.layers.add([inp1, inp2]) inp = layers.add([inp1, inp2])
hidden = keras.layers.Dense(2, activation='relu')(inp) hidden = layers.Dense(2, activation='relu')(inp)
hidden = keras.layers.Dropout(0.1)(hidden) hidden = layers.Dropout(0.1)(hidden)
output1 = keras.layers.Dense(NUM_CLASSES, activation='softmax')(hidden) output1 = layers.Dense(NUM_CLASSES, activation='softmax')(hidden)
output2 = keras.layers.Dense(NUM_CLASSES, activation='softmax')(hidden) output2 = layers.Dense(NUM_CLASSES, activation='softmax')(hidden)
model = keras.models.Model([inp1, inp2], [output1, output2]) model = training.Model([inp1, inp2], [output1, output2])
model.compile(loss='categorical_crossentropy', model.compile(loss='categorical_crossentropy',
optimizer='sgd', optimizer='sgd',
metrics=['accuracy']) metrics=['accuracy'])
@ -271,13 +276,13 @@ class TestTensorBoardV1(test.TestCase):
y_train = np_utils.to_categorical(y_train) y_train = np_utils.to_categorical(y_train)
with ops.Graph().as_default(), self.cached_session(): with ops.Graph().as_default(), self.cached_session():
model = keras.models.Sequential() model = sequential.Sequential()
model.add( model.add(
keras.layers.Dense( layers.Dense(
NUM_HIDDEN, input_dim=INPUT_DIM, activation='relu')) NUM_HIDDEN, input_dim=INPUT_DIM, activation='relu'))
# non_trainable_weights: moving_variance, moving_mean # non_trainable_weights: moving_variance, moving_mean
model.add(keras.layers.BatchNormalization()) model.add(layers.BatchNormalization())
model.add(keras.layers.Dense(NUM_CLASSES, activation='softmax')) model.add(layers.Dense(NUM_CLASSES, activation='softmax'))
model.compile( model.compile(
loss='categorical_crossentropy', loss='categorical_crossentropy',
optimizer='sgd', optimizer='sgd',
@ -371,7 +376,7 @@ class TestTensorBoardV1(test.TestCase):
loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy']) loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
cbks = [ cbks = [
keras.callbacks.ReduceLROnPlateau( callbacks.ReduceLROnPlateau(
monitor='val_loss', factor=0.5, patience=4, verbose=1), monitor='val_loss', factor=0.5, patience=4, verbose=1),
callbacks_v1.TensorBoard(log_dir=temp_dir) callbacks_v1.TensorBoard(log_dir=temp_dir)
] ]
@ -463,7 +468,7 @@ class TestTensorBoardV1(test.TestCase):
self.assertEqual(epoch_step, 0) self.assertEqual(epoch_step, 0)
self.assertEqual(epoch_summary.value[0].simple_value, 10.0) self.assertEqual(epoch_summary.value[0].simple_value, 10.0)
@test_util.run_in_graph_and_eager_modes @combinations.generate(combinations.combine(mode=['graph', 'eager']))
def test_Tensorboard_eager(self): def test_Tensorboard_eager(self):
temp_dir = tempfile.mkdtemp(dir=self.get_temp_dir()) temp_dir = tempfile.mkdtemp(dir=self.get_temp_dir())
self.addCleanup(shutil.rmtree, temp_dir, ignore_errors=True) self.addCleanup(shutil.rmtree, temp_dir, ignore_errors=True)
@ -529,7 +534,7 @@ class TestTensorBoardV1(test.TestCase):
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 1}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 1})
self.assertEqual(tb_cbk.writer.batch_summaries, []) self.assertEqual(tb_cbk.writer.batch_summaries, [])
tb_cbk.on_epoch_end(0, {'acc': 10.0, 'size': 1}) tb_cbk.on_epoch_end(0, {'acc': 10.0, 'size': 1})
self.assertEqual(len(tb_cbk.writer.epoch_summaries), 1) self.assertLen(tb_cbk.writer.epoch_summaries, 1)
tb_cbk.on_train_end() tb_cbk.on_train_end()
# Batch mode # Batch mode
@ -537,9 +542,9 @@ class TestTensorBoardV1(test.TestCase):
tb_cbk.writer = FileWriterStub(temp_dir) tb_cbk.writer = FileWriterStub(temp_dir)
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 1}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 1})
self.assertEqual(len(tb_cbk.writer.batch_summaries), 1) self.assertLen(tb_cbk.writer.batch_summaries, 1)
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 1}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 1})
self.assertEqual(len(tb_cbk.writer.batch_summaries), 2) self.assertLen(tb_cbk.writer.batch_summaries, 2)
self.assertFalse(tb_cbk.writer.epoch_summaries) self.assertFalse(tb_cbk.writer.epoch_summaries)
tb_cbk.on_train_end() tb_cbk.on_train_end()
@ -550,13 +555,13 @@ class TestTensorBoardV1(test.TestCase):
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10})
self.assertFalse(tb_cbk.writer.batch_summaries) self.assertFalse(tb_cbk.writer.batch_summaries)
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10})
self.assertEqual(len(tb_cbk.writer.batch_summaries), 1) self.assertLen(tb_cbk.writer.batch_summaries, 1)
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10})
self.assertEqual(len(tb_cbk.writer.batch_summaries), 1) self.assertLen(tb_cbk.writer.batch_summaries, 1)
tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10}) tb_cbk.on_batch_end(0, {'acc': 5.0, 'size': 10})
self.assertEqual(len(tb_cbk.writer.batch_summaries), 2) self.assertLen(tb_cbk.writer.batch_summaries, 2)
tb_cbk.on_batch_end(0, {'acc': 10.0, 'size': 10}) tb_cbk.on_batch_end(0, {'acc': 10.0, 'size': 10})
self.assertEqual(len(tb_cbk.writer.batch_summaries), 2) self.assertLen(tb_cbk.writer.batch_summaries, 2)
self.assertFalse(tb_cbk.writer.epoch_summaries) self.assertFalse(tb_cbk.writer.epoch_summaries)
tb_cbk.on_train_end() tb_cbk.on_train_end()