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:
parent
608ea8e583
commit
d40ff26630
@ -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",
|
||||||
],
|
],
|
||||||
|
@ -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()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user