Как использовать переменные tf.Transform Analyzer в preprocessing_fn - PullRequest
1 голос
/ 17 января 2020

Как я могу использовать переменную анализатора tf.Transform в preprocessing_fn моего конвейера TFX?

Я использую функцию tft.max для вычисления максимального значения для всего набора данных, который определяется как анализатор от просмотра исходного кода. Я хочу использовать результат этого анализатора в следующем вызове функции, но получаю следующую ошибку:

Функция преобразования

def preprocessing_fn(inputs):
    outputs = {}
    max_length = tft.max(inputs['MFCC_frame_count'], reduce_instance_dims=True)
    outputs['MFCC_data'] = tft.sparse_tensor_to_dense_with_shape(
        inputs['MFCC_data'],
        [max_length, 26],
        default_value=0
    )
    return outputs

Ошибка

TypeError: Dimension value must be integer or None or have an __index__ method, got <tf.Tensor 'max/min_and_max/Placeholder_1:0' shape=() dtype=int64>

Как я могу использовать это значение? Я пробовал несколько разных способов использовать это значение, но, похоже, ничего не работает.

Наши данные

context {
  feature {
    key: "MFCC_data"
    value {
      float_list {
        value: 6.972537994384766
        value: -24.602876663208008
        value: -18.28076934814453
        ...
      }
    }
  }
  feature {
    key: "MFCC_frame_count"
    value {
      int64_list {
        value: 316
      }
    }
  }
  ...
}

В нашем интерактивном конвейере

transform = Transform(
      examples=example_gen.outputs['examples'],
      schema=schema_gen.outputs['schema'],
      module_file='transform.py')
context.run(transform)

Соответствующие версии

Python 3.7.3
tfx==0.15.0
tensorflow==2.1.0
tensorflow-transform==0.15.0
...