Оценка Tensorflow Estimator с предварительной обработкой текста - загрузка словаря / таблицы поиска - PullRequest
0 голосов
/ 05 февраля 2020

Я использую API оценки (TF 1.14) для своей пользовательской модели, читая образцы TFRecords, содержащие текст.

Обучение было выполнено со следующим input_fn:

def get_input_fn(filenames, mode, params):
    def _parse_example(serialized_example, vocabs, params):
        ...
        sequence_sample = tf.parse_single_example(serialized_example, sequence_features)

        # get indices for myTextFeature - this will be the input for the model
        myIndices = getIndices(sequence_sample['myTextFeature'], vocabs)

        return {'myIndices': myIndices}, labels


    def _input_fn():        
        # Get vocabulary (load from file using tf.contrib.lookup.index_table_from_tensor):
        myVocabDict = getVocabOp(params.vocab_dir)

        dataset = tf.data.Dataset.from_tensor_slices(filenames)
        dataset = dataset.interleave(lambda x: tf.data.TFRecordDataset(x).map(lambda x: _parse_example(x, myVocabDict, params))
        ...
        return dataset
    return _input_fn

def getVocabOp(vocab_dir):
    myVocab = load_pickle_file(vocab_dir)
    return tf.contrib.lookup.index_table_from_file(myVocab)

def getIndices(myTextFeature, vocabs):
    indices = vocabs.lookup(myTextFeature)
    return indices

Поскольку ввод не передается напрямую в модель (текст, который необходимо преобразовать в индексы) - мне нужно, чтобы предварительная обработка происходила где-то в обслуживающей функции (оттуда она будет go до model_fn оценщика).

Предварительная обработка требует использования операции lookup_table (выполняется сначала путем загрузки словаря), и я хочу убедиться, что это произойдет только один раз , чтобы lookup_op не создавался при каждом вызове Обслуживание.

Как \ Где я должен загрузить файл словаря (список слов), и где я должен создать операцию index_table_from_file, которая будет создана только один раз функцией обслуживания оценщика?

def serving_input_fn():
  receiver_tensors = tf.placeholder(tf.string, shape=[None, hparams.list_size])

  ### THIS IS THE QUESTION:
  vocab = getVocabOp # SOMEHOW load the vocabulary from FILE
  featuers = getIndices(myTextFeature, vocab) # PARSE EXAMPLE HERE

  return tf.estimator.export.ServingInputReceiver(features, receiver_tensors)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...