Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

TFX para celular

Introdução

Este guia demonstra como o Tensorflow Extended (TFX) pode criar e avaliar modelos de aprendizado de máquina que serão implantados no dispositivo. O TFX agora fornece suporte nativo para TFLite , o que torna possível realizar inferências altamente eficientes em dispositivos móveis.

Este guia o orienta nas mudanças que podem ser feitas em qualquer pipeline para gerar e avaliar modelos TFLite. Fornecemos um exemplo completo aqui , demonstrando como o TFX pode treinar e avaliar modelos TFLite que são treinados a partir do conjunto de dados MNIST . Além disso, mostramos como o mesmo pipeline pode ser usado para exportar simultaneamente o SavedModel padrão baseado em Keras e o TFLite, permitindo aos usuários comparar a qualidade dos dois.

Presumimos que você esteja familiarizado com o TFX, nossos componentes e nossos pipelines. Caso contrário, consulte este tutorial .

Passos

Apenas duas etapas são necessárias para criar e avaliar um modelo TFLite no TFX. A primeira etapa é invocar o reescritor TFLite dentro do contexto do TFX Trainer para converter o modelo TensorFlow treinado em um TFLite. A segunda etapa é configurar o Avaliador para avaliar os modelos TFLite. Agora discutiremos um de cada vez.

Chamar o reescritor TFLite no Trainer.

O TFX Trainer espera que um run_fn definido pelo usuário seja especificado em um arquivo de módulo. Este run_fn define o modelo a ser treinado, treina-o para o número especificado de iterações e exporta o modelo treinado.

No restante desta seção, fornecemos fragmentos de código que mostram as alterações necessárias para chamar o reescritor TFLite e exportar um modelo TFLite. Todo esse código está localizado no run_fn do módulo MNIST TFLite .

Conforme mostrado no código abaixo, devemos primeiro criar uma assinatura que leva um Tensor para cada recurso como entrada. Observe que isso é diferente da maioria dos modelos existentes no TFX, que usam tf.Example protos serializados como entrada.

 signatures = {
      'serving_default':
          _get_serve_tf_examples_fn(
              model, tf_transform_output).get_concrete_function(
                  tf.TensorSpec(
                      shape=[None, 784],
                      dtype=tf.float32,
                      name='image_floats'))
  }

Em seguida, o modelo Keras é salvo como um SavedModel da mesma maneira que normalmente é.

  temp_saving_model_dir = os.path.join(fn_args.serving_model_dir, 'temp')
  model.save(temp_saving_model_dir, save_format='tf', signatures=signatures)

Por fim, criamos uma instância do reescritor TFLite ( tfrw ) e a invocamos no SavedModel para obter o modelo TFLite. Armazenamos esse modelo TFLite no serving_model_dir fornecido pelo chamador de run_fn . Dessa forma, o modelo TFLite é armazenado no local onde todos os componentes TFX downstream estarão esperando para encontrar o modelo.

  tfrw = rewriter_factory.create_rewriter(
      rewriter_factory.TFLITE_REWRITER, name='tflite_rewriter')
  converters.rewrite_saved_model(temp_saving_model_dir,
                                 fn_args.serving_model_dir,
                                 tfrw,
                                 rewriter.ModelType.TFLITE_MODEL)

Avaliando o modelo TFLite.

O TFX Evaluator oferece a capacidade de analisar modelos treinados para compreender sua qualidade em uma ampla gama de métricas. Além de analisar SavedModels, o TFX Evaluator também pode analisar modelos TFLite.

O fragmento de código a seguir (reproduzido do pipeline MNIST ) mostra como configurar um avaliador que analisa um modelo TFLite.

  # Informs the evaluator that the model is a TFLite model.
  eval_config_lite.model_specs[0].model_type = 'tf_lite'

  ...

  # Uses TFMA to compute the evaluation statistics over features of a TFLite
  # model.
  model_analyzer_lite = Evaluator(
      examples=example_gen.outputs['examples'],
      model=trainer_lite.outputs['model'],
      eval_config=eval_config_lite,
      instance_name='mnist_lite')

Como mostrado acima, a única mudança que nós precisamos fazer é definir o model_type campo para tf_lite . Nenhuma outra alteração de configuração é necessária para analisar o modelo TFLite. Independentemente de se um modelo TFLite ou um SavedModel é analisado, a saída do Evaluator terá exatamente a mesma estrutura.