aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/contrib/lite/python/lite_test.py
diff options
context:
space:
mode:
authorGravatar Nupur Garg <nupurgarg@google.com>2018-09-26 19:28:14 -0700
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2018-09-26 19:33:54 -0700
commit85258e06edf424492905fd032b02ff4d420b9da1 (patch)
treeba9e114333dbe20b5a68c188e4695d133b13c56a /tensorflow/contrib/lite/python/lite_test.py
parent5b971c7eae5f2049a4725b16a4a44b688d3506b0 (diff)
Rename TocoConverter to TFLiteConverter.
PiperOrigin-RevId: 214710175
Diffstat (limited to 'tensorflow/contrib/lite/python/lite_test.py')
-rw-r--r--tensorflow/contrib/lite/python/lite_test.py171
1 files changed, 122 insertions, 49 deletions
diff --git a/tensorflow/contrib/lite/python/lite_test.py b/tensorflow/contrib/lite/python/lite_test.py
index f112ed5cdd..33f8fc1e8c 100644
--- a/tensorflow/contrib/lite/python/lite_test.py
+++ b/tensorflow/contrib/lite/python/lite_test.py
@@ -50,18 +50,18 @@ class FromConstructor(test_util.TensorFlowTestCase):
# `output_arrays` is not defined.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter(
+ lite.TFLiteConverter(
None, None, [], input_arrays_with_shape=[('input', [3, 9])])
self.assertEqual(message, str(error.exception))
# `input_arrays_with_shape` is not defined.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter(None, [], None, output_arrays=['output'])
+ lite.TFLiteConverter(None, [], None, output_arrays=['output'])
self.assertEqual(message, str(error.exception))
# Tests valid constructors using a dummy value for the GraphDef.
def testValidConstructor(self):
- converter = lite.TocoConverter(
+ converter = lite.TFLiteConverter(
None,
None,
None,
@@ -76,7 +76,7 @@ class FromConstructor(test_util.TensorFlowTestCase):
'The batch size cannot be set for this model. Please use '
'input_shapes parameter.', str(error.exception))
- converter = lite.TocoConverter(None, ['input_tensor'], ['output_tensor'])
+ converter = lite.TFLiteConverter(None, ['input_tensor'], ['output_tensor'])
self.assertTrue(converter._has_valid_tensors())
@@ -89,7 +89,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -121,7 +122,7 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(
+ converter = lite.TFLiteConverter.from_session(
sess, [in_tensor_1, in_tensor_2], [out_tensor])
converter.inference_type = lite_constants.QUANTIZED_UINT8
converter.quantized_input_stats = {
@@ -166,7 +167,7 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(
+ converter = lite.TFLiteConverter.from_session(
sess, [in_tensor_1, in_tensor_2], [out_tensor])
converter.inference_type = lite_constants.QUANTIZED_UINT8
converter.quantized_input_stats = {'inputA': (0., 1.)} # mean, std_dev
@@ -182,7 +183,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Test invalid shape. None after 1st dimension.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
with self.assertRaises(ValueError) as error:
converter.convert()
self.assertEqual('Provide an input shape for input array \'Placeholder\'.',
@@ -195,7 +197,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Test invalid shape. None after 1st dimension.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
with self.assertRaises(ValueError) as error:
converter.convert()
self.assertEqual(
@@ -210,7 +213,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -242,7 +246,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess.run(_global_variables_initializer())
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -272,7 +277,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
converter.output_format = lite_constants.GRAPHVIZ_DOT
graphviz_output = converter.convert()
self.assertTrue(graphviz_output)
@@ -285,7 +291,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
graphviz_dir = self.get_temp_dir()
converter.dump_graphviz_dir = graphviz_dir
tflite_model = converter.convert()
@@ -299,7 +306,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
self.assertTrue(num_items_graphviz)
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
graphviz_dir = self.get_temp_dir()
converter.dump_graphviz_dir = graphviz_dir
converter.dump_graphviz_video = True
@@ -317,7 +325,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
converter.inference_input_type = lite_constants.QUANTIZED_UINT8
converter.quantized_input_stats = {'Placeholder': (0., 1.)} # mean, std_dev
tflite_model = converter.convert()
@@ -347,7 +356,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
converter.inference_type = lite_constants.QUANTIZED_UINT8
converter.quantized_input_stats = {'Placeholder': (0., 1.)} # mean, std_dev
converter.default_ranges_stats = (0, 6) # min, max
@@ -387,13 +397,13 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert float model.
- float_converter = lite.TocoConverter.from_session(sess, [in_tensor_1],
- [out_tensor])
+ float_converter = lite.TFLiteConverter.from_session(sess, [in_tensor_1],
+ [out_tensor])
float_tflite = float_converter.convert()
self.assertTrue(float_tflite)
# Convert quantized weights model.
- quantized_converter = lite.TocoConverter.from_session(
+ quantized_converter = lite.TFLiteConverter.from_session(
sess, [in_tensor_1], [out_tensor])
quantized_converter.post_training_quantize = True
quantized_tflite = quantized_converter.convert()
@@ -409,7 +419,8 @@ class FromSessionTest(test_util.TensorFlowTestCase):
sess = session.Session()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
+ [out_tensor])
converter.converter_mode = lite.ConverterMode.TOCO_EXTENDED_ALL
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -424,6 +435,22 @@ class FromSessionTest(test_util.TensorFlowTestCase):
'sure you invoke the Eager delegate before inference.',
str(error.exception))
+ def testFloatTocoConverter(self):
+ """Tests deprecated test TocoConverter."""
+ in_tensor = array_ops.placeholder(
+ shape=[1, 16, 16, 3], dtype=dtypes.float32)
+ out_tensor = in_tensor + in_tensor
+ sess = session.Session()
+
+ # Convert model and ensure model is not None.
+ converter = lite.TocoConverter.from_session(sess, [in_tensor], [out_tensor])
+ tflite_model = converter.convert()
+ self.assertTrue(tflite_model)
+
+ # Ensure the interpreter is able to load.
+ interpreter = Interpreter(model_content=tflite_model)
+ interpreter.allocate_tensors()
+
class FromFrozenGraphFile(test_util.TensorFlowTestCase):
@@ -439,8 +466,8 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
sess.close()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_frozen_graph(graph_def_file,
- ['Placeholder'], ['add'])
+ converter = lite.TFLiteConverter.from_frozen_graph(graph_def_file,
+ ['Placeholder'], ['add'])
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -474,7 +501,7 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
sess.close()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_frozen_graph(
+ converter = lite.TFLiteConverter.from_frozen_graph(
graph_def_file, ['Placeholder'], ['add'],
input_shapes={'Placeholder': [1, 16, 16, 3]})
tflite_model = converter.convert()
@@ -503,8 +530,8 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
# Ensure the graph with variables cannot be converted.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter.from_frozen_graph(graph_def_file, ['Placeholder'],
- ['add'])
+ lite.TFLiteConverter.from_frozen_graph(graph_def_file, ['Placeholder'],
+ ['add'])
self.assertEqual('Please freeze the graph using freeze_graph.py.',
str(error.exception))
@@ -520,8 +547,8 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
sess.close()
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_frozen_graph(graph_def_file,
- ['Placeholder'], ['add'])
+ converter = lite.TFLiteConverter.from_frozen_graph(graph_def_file,
+ ['Placeholder'], ['add'])
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -545,8 +572,8 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
def testInvalidFileNotFound(self):
with self.assertRaises(IOError) as error:
- lite.TocoConverter.from_frozen_graph('invalid_file', ['Placeholder'],
- ['add'])
+ lite.TFLiteConverter.from_frozen_graph('invalid_file', ['Placeholder'],
+ ['add'])
self.assertEqual('File \'invalid_file\' does not exist.',
str(error.exception))
@@ -558,8 +585,8 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
# Attempts to convert the invalid model.
with self.assertRaises(IOError) as error:
- lite.TocoConverter.from_frozen_graph(graph_def_file, ['Placeholder'],
- ['add'])
+ lite.TFLiteConverter.from_frozen_graph(graph_def_file, ['Placeholder'],
+ ['add'])
self.assertEqual(
'Unable to parse input file \'{}\'.'.format(graph_def_file),
str(error.exception))
@@ -580,7 +607,7 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
# Tests the object detection model that cannot be loaded in TensorFlow.
self._initObjectDetectionArgs()
- converter = lite.TocoConverter.from_frozen_graph(
+ converter = lite.TFLiteConverter.from_frozen_graph(
self._graph_def_file, self._input_arrays, self._output_arrays,
self._input_shapes)
converter.allow_custom_ops = True
@@ -621,7 +648,7 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
# Missing `input_shapes`.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter.from_frozen_graph(
+ lite.TFLiteConverter.from_frozen_graph(
self._graph_def_file, self._input_arrays, self._output_arrays)
self.assertEqual('input_shapes must be defined for this model.',
str(error.exception))
@@ -632,7 +659,7 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
# `input_shapes` does not contain the names in `input_arrays`.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter.from_frozen_graph(
+ lite.TFLiteConverter.from_frozen_graph(
self._graph_def_file,
self._input_arrays,
self._output_arrays,
@@ -641,6 +668,27 @@ class FromFrozenGraphFile(test_util.TensorFlowTestCase):
'input_shapes must contain a value for each item in input_array.',
str(error.exception))
+ def testFloatTocoConverter(self):
+ in_tensor = array_ops.placeholder(
+ shape=[1, 16, 16, 3], dtype=dtypes.float32)
+ _ = in_tensor + in_tensor
+ sess = session.Session()
+
+ # Write graph to file.
+ graph_def_file = os.path.join(self.get_temp_dir(), 'model.pb')
+ write_graph(sess.graph_def, '', graph_def_file, False)
+ sess.close()
+
+ # Convert model and ensure model is not None.
+ converter = lite.TocoConverter.from_frozen_graph(graph_def_file,
+ ['Placeholder'], ['add'])
+ tflite_model = converter.convert()
+ self.assertTrue(tflite_model)
+
+ # Ensure the model is able to load.
+ interpreter = Interpreter(model_content=tflite_model)
+ interpreter.allocate_tensors()
+
class FromSavedModelTest(test_util.TensorFlowTestCase):
@@ -663,7 +711,7 @@ class FromSavedModelTest(test_util.TensorFlowTestCase):
saved_model_dir = self._createSavedModel(shape=[1, 16, 16, 3])
# Convert model and ensure model is not None.
- converter = lite.TocoConverter.from_saved_model(saved_model_dir)
+ converter = lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -693,7 +741,7 @@ class FromSavedModelTest(test_util.TensorFlowTestCase):
"""Test a SavedModel, with None in input tensor's shape."""
saved_model_dir = self._createSavedModel(shape=[None, 16, 16, 3])
- converter = lite.TocoConverter.from_saved_model(saved_model_dir)
+ converter = lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -724,7 +772,7 @@ class FromSavedModelTest(test_util.TensorFlowTestCase):
"""Test a SavedModel ordering of input arrays."""
saved_model_dir = self._createSavedModel(shape=[1, 16, 16, 3])
- converter = lite.TocoConverter.from_saved_model(
+ converter = lite.TFLiteConverter.from_saved_model(
saved_model_dir, input_arrays=['inputB', 'inputA'])
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -757,7 +805,7 @@ class FromSavedModelTest(test_util.TensorFlowTestCase):
saved_model_dir = self._createSavedModel(shape=[1, 16, 16, 3])
# Check case where input shape is given.
- converter = lite.TocoConverter.from_saved_model(
+ converter = lite.TFLiteConverter.from_saved_model(
saved_model_dir,
input_arrays=['inputA'],
input_shapes={'inputA': [1, 16, 16, 3]})
@@ -766,12 +814,25 @@ class FromSavedModelTest(test_util.TensorFlowTestCase):
self.assertTrue(tflite_model)
# Check case where input shape is None.
- converter = lite.TocoConverter.from_saved_model(
+ converter = lite.TFLiteConverter.from_saved_model(
saved_model_dir, input_arrays=['inputA'], input_shapes={'inputA': None})
tflite_model = converter.convert()
self.assertTrue(tflite_model)
+ def testSimpleModelTocoConverter(self):
+ """Test a SavedModel with deprecated TocoConverter."""
+ saved_model_dir = self._createSavedModel(shape=[1, 16, 16, 3])
+
+ # Convert model and ensure model is not None.
+ converter = lite.TocoConverter.from_saved_model(saved_model_dir)
+ tflite_model = converter.convert()
+ self.assertTrue(tflite_model)
+
+ # Ensure the model is able to load.
+ interpreter = Interpreter(model_content=tflite_model)
+ interpreter.allocate_tensors()
+
class FromKerasFile(test_util.TensorFlowTestCase):
@@ -805,7 +866,7 @@ class FromKerasFile(test_util.TensorFlowTestCase):
"""Test a Sequential tf.keras model with default inputs."""
keras_file = self._getSequentialModel()
- converter = lite.TocoConverter.from_keras_model_file(keras_file)
+ converter = lite.TFLiteConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -845,13 +906,13 @@ class FromKerasFile(test_util.TensorFlowTestCase):
# Invalid input array raises error.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter.from_keras_model_file(
+ lite.TFLiteConverter.from_keras_model_file(
keras_file, input_arrays=['invalid-input'])
self.assertEqual("Invalid tensors 'invalid-input' were found.",
str(error.exception))
# Valid input array.
- converter = lite.TocoConverter.from_keras_model_file(
+ converter = lite.TFLiteConverter.from_keras_model_file(
keras_file, input_arrays=['dense_input'])
tflite_model = converter.convert()
os.remove(keras_file)
@@ -863,13 +924,13 @@ class FromKerasFile(test_util.TensorFlowTestCase):
# Passing in shape of invalid input array has no impact as long as all input
# arrays have a shape.
- converter = lite.TocoConverter.from_keras_model_file(
+ converter = lite.TFLiteConverter.from_keras_model_file(
keras_file, input_shapes={'invalid-input': [2, 3]})
tflite_model = converter.convert()
self.assertTrue(tflite_model)
# Passing in shape of valid input array.
- converter = lite.TocoConverter.from_keras_model_file(
+ converter = lite.TFLiteConverter.from_keras_model_file(
keras_file, input_shapes={'dense_input': [2, 3]})
tflite_model = converter.convert()
os.remove(keras_file)
@@ -890,13 +951,13 @@ class FromKerasFile(test_util.TensorFlowTestCase):
# Invalid output array raises error.
with self.assertRaises(ValueError) as error:
- lite.TocoConverter.from_keras_model_file(
+ lite.TFLiteConverter.from_keras_model_file(
keras_file, output_arrays=['invalid-output'])
self.assertEqual("Invalid tensors 'invalid-output' were found.",
str(error.exception))
# Valid output array.
- converter = lite.TocoConverter.from_keras_model_file(
+ converter = lite.TFLiteConverter.from_keras_model_file(
keras_file, output_arrays=['time_distributed/Reshape_1'])
tflite_model = converter.convert()
os.remove(keras_file)
@@ -926,7 +987,7 @@ class FromKerasFile(test_util.TensorFlowTestCase):
os.close(fd)
# Convert to TFLite model.
- converter = lite.TocoConverter.from_keras_model_file(keras_file)
+ converter = lite.TFLiteConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -991,7 +1052,7 @@ class FromKerasFile(test_util.TensorFlowTestCase):
os.close(fd)
# Convert to TFLite model.
- converter = lite.TocoConverter.from_keras_model_file(keras_file)
+ converter = lite.TFLiteConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -1052,7 +1113,7 @@ class FromKerasFile(test_util.TensorFlowTestCase):
os.close(fd)
# Convert to TFLite model.
- converter = lite.TocoConverter.from_keras_model_file(keras_file)
+ converter = lite.TFLiteConverter.from_keras_model_file(keras_file)
tflite_model = converter.convert()
self.assertTrue(tflite_model)
@@ -1086,6 +1147,18 @@ class FromKerasFile(test_util.TensorFlowTestCase):
np.testing.assert_almost_equal(tflite_result, keras_result, 5)
os.remove(keras_file)
+ def testSequentialModelTocoConverter(self):
+ """Test a Sequential tf.keras model with deprecated TocoConverter."""
+ keras_file = self._getSequentialModel()
+
+ converter = lite.TocoConverter.from_keras_model_file(keras_file)
+ tflite_model = converter.convert()
+ self.assertTrue(tflite_model)
+
+ # Ensure the model is able to load.
+ interpreter = Interpreter(model_content=tflite_model)
+ interpreter.allocate_tensors()
+
if __name__ == '__main__':
test.main()