Я использую оценщик TensorFlow для обучения и сохранения модели, а затем конвертирую ее в .tflite.Я сохранил модель следующим образом:
feat_cols = [tf.feature_column.numeric_column('feature1'),
tf.feature_column.numeric_column('feature2'),
tf.feature_column.numeric_column('feature3'),
tf.feature_column.numeric_column('feature4')]
def serving_input_receiver_fn():
"""An input receiver that expects a serialized tf.Example."""
feature_spec = tf.feature_column.make_parse_example_spec(feat_cols)
default_batch_size = 1
serialized_tf_example = tf.placeholder(dtype=tf.string, shape=[default_batch_size], name='tf_example')
receiver_tensors = {'examples': serialized_tf_example}
features = tf.parse_example(serialized_tf_example, feature_spec)
return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)
dnn_regressor.export_saved_model(export_dir_base='model',
serving_input_receiver_fn=serving_input_receiver_fn)
Когда я пытаюсь преобразовать полученный файл .pb, используя:
tflite_convert --output_file=/tmp/foo.tflite --saved_model_dir=/tmp/saved_model
, я получаю исключение, в котором говорится, что операция ParseExample не поддерживаетсяTensorFlow Lite.
Некоторые операторы в модели не поддерживаются стандартной средой выполнения TensorFlow Lite.Если это собственные операторы TensorFlow, вы можете использовать расширенную среду выполнения, передав --enable_select_tf_ops или установив target_ops = TFLITE_BUILTINS, SELECT_TF_OPS при вызове tf.lite.TFLiteConverter ().В противном случае, если у вас есть пользовательская реализация для них, вы можете отключить эту ошибку с помощью --allow_custom_ops или установив allow_custom_ops = True при вызове tf.lite.TFLiteConverter ().Вот список используемых вами встроенных операторов: CONCATENATION, FULLY_CONNECTED, RESHAPE.Вот список операторов, для которых вам понадобятся пользовательские реализации: ParseExample.
Если я попытаюсь экспортировать модель без сериализации , когда я попытаюсь предсказать результат.файл pb, который ожидает функция, и пустой set (), а не диктовку входных данных, которые я передаю.
ValueError: Получены неожиданные ключи в input_dict: {'feature1', 'feature2', 'feature3',' feature4 '} ожидается: set ()
Что я делаю не так?Вот код, который пытается сохранить модель без какой-либо сериализации
features = {
'feature1': tf.placeholder(dtype=tf.float32, shape=[1], name='feature1'),
'feature2': tf.placeholder(dtype=tf.float32, shape=[1], name='feature2'),
'feature3': tf.placeholder(dtype=tf.float32, shape=[1], name='feature3'),
'feature4': tf.placeholder(dtype=tf.float32, shape=[1], name='feature4')
}
def serving_input_receiver_fn():
return tf.estimator.export.ServingInputReceiver(features, features)
dnn_regressor.export_savedmodel(export_dir_base='model', serving_input_receiver_fn=serving_input_receiver_fn, as_text=True)