Как использовать tf.contrib.estimator.forward_features

Я пытаюсь использовать forward_features, чтобы получить ключи экземпляра для cloudml, но я всегда получаю ошибки, которые не знаю, как их исправить. Раздел предварительной обработки, в котором используется tf. Transform, является модификацией https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/reddit_tft где ключ экземпляра представляет собой строку, а все остальное представляет собой набор чисел с плавающей точкой.

def gzip_reader_fn():
      return tf.TFRecordReader(options=tf.python_io.TFRecordOptions(
          compression_type=tf.python_io.TFRecordCompressionType.GZIP))


def get_transformed_reader_input_fn(transformed_metadata,
                                    transformed_data_paths,
                                    batch_size,
                                    mode):
  """Wrap the get input features function to provide the runtime arguments."""
  return input_fn_maker.build_training_input_fn(
      metadata=transformed_metadata,
      file_pattern=(
          transformed_data_paths[0] if len(transformed_data_paths) == 1
          else transformed_data_paths),
      training_batch_size=batch_size,
      label_keys=[],
      #feature_keys=FEATURE_COLUMNS,
      #key_feature_name='example_id',
      reader=gzip_reader_fn,
      reader_num_threads=4,
      queue_capacity=batch_size * 2,
      randomize_input=(mode != tf.contrib.learn.ModeKeys.EVAL),
      num_epochs=(1 if mode == tf.contrib.learn.ModeKeys.EVAL else None))

estimator = KMeansClustering(num_clusters=8, 
      initial_clusters=KMeansClustering.KMEANS_PLUS_PLUS_INIT, 
      kmeans_plus_plus_num_retries=32,
      relative_tolerance=0.0001)

estimator = tf.contrib.estimator.forward_features(
      estimator,
      'example_id')

train_input_fn = get_transformed_reader_input_fn(
      transformed_metadata, args.train_data_paths, args.batch_size,
      tf.contrib.learn.ModeKeys.TRAIN)

estimator.train(input_fn=train_input_fn)

Если бы я должен был пройти в столбце ключей рядом с функциями обучения, то я получил бы ошибку Tensors in list passed to 'values' of 'ConcatV2' Op have types [float32, float32, string, float32, float32, float32, float32, float32, float32, f loat32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32, float32] that don't all match. Однако, если бы я не передавал ключи экземпляра во время обучения, я получаю ошибку значения, говорящую, что ключ не существует в функциях. Кроме того, если бы я изменил имя ключевого столбца в разделе forward_features с 'example_id' на какое-то случайное имя, которое не является столбцом, то я все равно получаю первую ошибку вместо второй. Может ли кто-нибудь помочь мне разобраться в этом?

1 ответ

Пожалуйста, проверьте следующее:

(1) Функции пересылки работают только с TF.estimator. Убедитесь, что вы не используете contrib.learn.estimator. (обновление: вы используете класс, который наследуется от tf.estimator)

(2) Убедитесь, что ваша функция ввода читается в ключевой колонке. Таким образом, ключевой столбец должен быть частью вашего входного набора данных.

(3) В случае tf.transform #2 означает, что метаданные преобразования должны отражать схему ключа. Похоже, что сообщение об ошибке указывает на то, что схема определила его как число с плавающей точкой, и это на самом деле строка. Или что-то типа того.

(4) Убедитесь, что ключевой столбец НЕ используется вашей моделью. Таким образом, вы не должны создавать FeatureColumn с ним. Другими словами, модель будет просто проходить через ключ, который читается input_fn, предиктору.

(5) Если вы не видите ключ в выводе, посмотрите, поможет ли этот обходной путь:

https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/courses/machine_learning/deepdive/07_structured/babyweight/trainer/model.py

По сути, forward_features изменяет график в памяти, но не экспортируемую подпись. Мой обходной путь исправляет это.

Другие вопросы по тегам