Split merged TFLiteConverter implementations into frozen graph converter and saved model converter

PiperOrigin-RevId: 310301390
Change-Id: I021c1fa678d6367226e1a19e646bb6d0ff9769e3
This commit is contained in:
Jaesung Chung 2020-05-06 23:23:12 -07:00 committed by TensorFlower Gardener
parent 59e53e99ce
commit 0c0555d94b
5 changed files with 910 additions and 550 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2318,5 +2318,42 @@ class ImportOpsUtilTest(LiteTest):
self.assertIsNotNone(lite.get_potentially_supported_ops())
class DefaultConverterAttrsTest(LiteTest):
def testAttrs(self):
with ops.Graph().as_default():
in_tensor = array_ops.placeholder(shape=[2, 2], dtype=dtypes.float32)
out_tensor = in_tensor + in_tensor
sess = session.Session()
# Convert model.
converter = lite.TFLiteConverter.from_session(sess, [in_tensor],
[out_tensor])
# Assert output format.
self.assertEqual(converter.output_format, lite_constants.TFLITE)
# Assert the default inference type is float.
self.assertEqual(converter.inference_type, lite_constants.FLOAT)
# Assert the default inference type overrides are None.
self.assertIsNone(converter.inference_input_type)
self.assertIsNone(converter.inference_output_type)
# Assert the default quantization options are not set.
self.assertEqual(converter.quantized_input_stats, {})
self.assertIsNone(converter.default_ranges_stats)
self.assertFalse(converter.reorder_across_fake_quant)
self.assertFalse(converter.change_concat_input_ranges)
# Assert dropping control dependency is enabled by default.
self.assertTrue(converter.drop_control_dependency)
# Assert dumping extra information is disabled by default.
self.assertIsNone(converter.dump_graphviz_dir)
self.assertFalse(converter.dump_graphviz_video)
self.assertIsNone(converter.conversion_summary_dir)
if __name__ == '__main__':
test.main()

View File

@ -981,6 +981,27 @@ class UnknownShapes(lite_v2_test_util.ModelTest):
np.testing.assert_almost_equal(
expected_value.numpy(), actual_value[0], decimal=4)
def testSizeInvalid(self):
@tf.function(input_signature=[
tf.TensorSpec(shape=[1, None, 16, 3], dtype=tf.float32)
])
def model(in_tensor):
return in_tensor + in_tensor
concrete_func = model.get_concrete_function()
# Test invalid shape. None after 1st dimension. Run with TOCO in order to
# invoke shape checking code.
converter = lite.TFLiteConverterV2.from_concrete_functions([concrete_func])
converter.experimental_new_converter = False
with self.assertRaises(ValueError) as error:
converter.convert()
self.assertEqual(
'None is only supported in the 1st dimension. Tensor '
'\'in_tensor\' has invalid shape \'[1, None, 16, 3]\'.',
str(error.exception))
if __name__ == '__main__':
test.main()

View File

@ -1,11 +1,13 @@
path: "tensorflow.lite.TFLiteConverter"
tf_class {
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteConverter\'>"
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteFrozenGraphConverter\'>"
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteConverterBaseV1\'>"
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteConverterBase\'>"
is_instance: "<type \'object\'>"
member_method {
name: "__init__"
argspec: "args=[\'self\', \'graph_def\', \'input_tensors\', \'output_tensors\', \'input_arrays_with_shape\', \'output_arrays\', \'experimental_debug_info_func\', \'saved_model_dir\', \'saved_model_tags\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\', \'None\', \'None\'], "
argspec: "args=[\'self\', \'graph_def\', \'input_tensors\', \'output_tensors\', \'input_arrays_with_shape\', \'output_arrays\', \'experimental_debug_info_func\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\'], "
}
member_method {
name: "convert"

View File

@ -1,11 +1,13 @@
path: "tensorflow.lite.TFLiteConverter"
tf_class {
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteConverterV2\'>"
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteFrozenGraphConverterV2\'>"
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteConverterBaseV2\'>"
is_instance: "<class \'tensorflow.lite.python.lite.TFLiteConverterBase\'>"
is_instance: "<type \'object\'>"
member_method {
name: "__init__"
argspec: "args=[\'self\', \'funcs\', \'trackable_obj\', \'saved_model_dir\', \'saved_model_tags\'], varargs=None, keywords=None, defaults=[\'None\', \'None\', \'None\'], "
argspec: "args=[\'self\', \'funcs\', \'trackable_obj\'], varargs=None, keywords=None, defaults=[\'None\'], "
}
member_method {
name: "convert"