Как выполнить поиск и замену строки на Tensorflow String Tensor? - PullRequest
0 голосов
/ 02 мая 2018

В настоящее время я использую API набора данных Tensorflow, чтобы выполнить некоторые дополнения к изображениям по указанному пути. Само имя файла содержит информацию о том, дополнять ли файл или нет. Поэтому я хочу прочитать файлы из набора данных и для каждого файла, выполнить поиск по имени файла, и если я найду определенную подстроку, тогда установите флаг bool и замените подстроку на "".

Я получаю ошибку:

AttributeError: у объекта 'Tensor' нет атрибута 'find'

Я не могу выполнить "поиск" для тензора со строковыми записями dtype, потому что поиск не является частью Tensor, поэтому я пытаюсь выяснить, как мне выполнить вышеуказанное действие. Ниже я поделился кодом, который, я думаю, демонстрирует то, что я пытаюсь сделать. Производительность очень важна, поэтому я предпочел бы сделать это правильно, если кто-нибудь увидит, что я собираюсь сделать это через API набора данных неправильно.

def preproc_img(filenames):
  def parse_fn(filename):
    augment_inst = False
    if cfg.SPLIT_INTO_INST:
      #*****************************************************
      #*** THIS IS WHERE THE LOGIC IS CURRENTLY BREAKING ***
      #*****************************************************
      if filename.find('_data_augmentation') != -1:
        augment_inst = True
        filename = filename.replace('_data_augmentation', '')

    image_string = tf.read_file(filename)
    img = tf.image.decode_image(image_string, channels=3)
    return dict(zip([filename], [img]))   

  dataset = tf.data.Dataset.from_tensor_slices(filenames)
  dataset = dataset.map(parse_fn)
  iterator = dataset.make_one_shot_iterator()
  return iterator.get_next()


def perform_train():
  if __name__ == '__main__':
    filenames = helper.get_image_paths()
    next_batch = preproc_img(filenames)

  with tf.Session() as sess:
    with sess .graph.as_default():
      sess.run(tf.local_variables_initializer())
      sess.run(tf.global_variables_initializer())

      dat = sess.run(next_batch)
      # I would now go about calling any of my tf op code below

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете использовать tf.regex_replace для замены текста в тензор tf.string.

filename = tf.regex_replace(filename, "_data_augmentation", "")
...