преобразование изображения tenorflow_dataset с помощью dataset.map - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь загрузить в cifar100 dataset библиотеку tesorflow_dataset в Python. Как только данные загружены с помощью .load(), я пытаюсь преобразовать изображения в установленный размер с помощью .map(). Лямбда внутри карты дает мне

TypeError: () отсутствует 2 обязательных позиционных аргумента: 'coarse_label' и 'label'

при запуске моего кода.

Каков наилучший способ преобразования этих изображений при сохранении информации метки в данных? Я не совсем уверен, как лямбда-функция взаимодействует с набором данных.

Это делается с помощью tenorflow 2.0.0b1, наборов данных tenorflow 1.0.2 и Python 3.7.3

def transform_images(x_train, size):
    x_train = tf.image.resize(x_train, (size, size))
    x_train = x_train / 255
    return x_train

train_dataset = tfds.load(name="cifar100", split=tfds.Split.TRAIN)
train_dataset = train_dataset.map(lambda image, coarse_label, label: 
        (dataset.transform_images(image, FLAGS.size), coarse_label, label))

1 Ответ

1 голос
/ 04 июля 2019

Каждая строка вашего train_dataset является диктатом, а не кортежем. Таким образом, вы не можете использовать lambda как lambda image, coarse_label, label.

import tensorflow as tf
import tensorflow_datasets as tfds

train_dataset = tfds.load(name="cifar100", split=tfds.Split.TRAIN)
print(train_dataset.output_shapes)

# {'image': TensorShape([32, 32, 3]), 'label': TensorShape([]), 'coarse_label': TensorShape([])}

Вы должны использовать его следующим образом:

def transform_images(row, size):
    x_train = tf.image.resize(row['image'], (size, size))
    x_train = x_train  / 255
    return x_train, row['coarse_label'], row['label']

train_dataset = train_dataset.map(lambda row:transform_images(row, 16))
print(train_dataset.output_shapes)

# (TensorShape([16, 16, 3]), TensorShape([]), TensorShape([]))
...