Я не могу создать Dataset.from_generator () с генератором, который использует панды Dataframes в качестве аргументов - PullRequest
0 голосов
/ 14 июня 2019

Я хочу создать конвейер данных из генератора, который использует кадры данных Pandas, чтобы найти пути к изображениям на диске и загрузить их в конвейер.Tensorflow не позволит мне сделать это, выдав сообщение Can't convert non-rectangular Python sequence to Tensor..

Я попытался использовать .values в аргументе args при передаче генератора в tf.data.Dataset.from_generator, но мне пришлось быПерепишите весь код, который я написал, используя кадры данных, чтобы найти пути к нужным изображениям.

Вот команда для создания набора данных:

train_dataset = tf.data.Dataset.from_generator(make_triplet_dataset, (tf.float32, tf.float32, tf.float32), args = ([train_families, train_positive_relations]))

А вот *Генератор 1014 * (который использует кадры данных pandas в качестве аргументов):

`def make_triplet_dataset (family, positive_relations): '' 'Генератор наборов данных, который возвращает случайный якорь, положительные и отрицательные изображения каждый раз, когда он называется' ''в то время как True:

    # generates random triplet
    anchor, positive, negative = make_triplet(families, positive_relations)

    # builds the path for the randomly chosen images
    path_anchor_img = 'train/' + anchor + '/' + random.choice(os.listdir('train/' + anchor))
    path_positive_img = 'train/' + positive + '/' + random.choice(os.listdir('train/' + positive))
    path_negative_img = 'train/' + negative + '/' + random.choice(os.listdir('train/' + negative))

    # loads and preprocess the images to be used in the in the algorithm 
    anchor_img = preprocess_input(cv2.imread(path_anchor_img)) # preprocess does a (img/127.5) - 1 operation
    positive_img = preprocess_input(cv2.imread(path_positive_img))
    negative_img = preprocess_input(cv2.imread(path_negative_img))

    yield (anchor_img, positive_img, negative_img)`

Функция make_triplet - это вложенная функция, которая использует панды Dataframes для генерации путей к изображениям.Я хочу иметь возможность генерировать набор данных с тензорным потоком с генераторами, которые могут выдавать изображения в триплетах, используя панды Dataframes, чтобы найти пути к этим изображениям и загрузить их в конвейер.Пожалуйста, если кто-то может помочь, это будет оценено.

1 Ответ

0 голосов
/ 14 июня 2019

Нашел ответ. Вместо того, чтобы передавать аргументы pandas dataframes для функции генератора в параметре args в методе tf.data.Dataset.from_generator, я использовал lambda для передачи их в саму функцию генератора:

train_dataset = tf.data.Dataset.from_generator(lambda: make_triplet_dataset(train_families, train_positive_relations), output_types = (tf.float32, tf.float32, tf.float32))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...