tenesflow: объединение to_categorical () с наборами данных и map () - PullRequest
0 голосов
/ 26 октября 2019

Короче говоря, я изо всех сил пытаюсь преобразовать маску категории изображения на пиксель в tf.data.Dataset из кодировки целочисленного класса в кодировку "горячим способом".

Рассмотрим учебник по тензорному потоку сегментации изображенияпример здесь: https://www.tensorflow.org/tutorials/images/segmentation.

Входными данными является изображение, а выходными данными является целочисленная маска категории для каждого пикселя. В их примере маска имеет значение категории в каждом пикселе, представленное целым числом: {0, 1 или 2}.

Переменные train и test имеют тип tf.data.Dataset, и каждый образец представляет собой кортеж (изображение, маска).

Эта форма маски / вывода соответствует функции потерь sparse_categorical_crossentropy в учебном пособии. Тем не менее, я хотел бы иметь возможность использовать другие функции потери, для которых вместо этого требуется горячее кодирование.

Я пытался преобразовать наборы данных с помощью функции tf.keras.utils.to_categorical() с помощью вызова map (), т.е. .:

    def mask_to_categorical(image, mask):
        mask = tf.keras.utils.to_categorical(mask,3)
        return image, mask

    train = train.map(mask_to_categorical)

Однако эта ошибка завершается ошибкой, такой как:

    {...}/tensorflow_core/python/keras/utils/np_utils.py:40 to_categorical
        y = np.array(y, dtype='int')

    TypeError: __array__() takes 1 positional argument but 2 were given

Примечание:

Мой поиск пока указывает на стремление /нерешительные проблемы как одна из возможных причин. Для чего это стоит, я проверил, что я бегу в нетерпеливом режиме через:

    >>> print('tf.executing_eagerly() = ', tf.executing_eagerly())

    tf.executing_eagerly() =  True

Есть предложения? Спасибо!

1 Ответ

0 голосов
/ 26 октября 2019

Попробуйте изменить свою функцию для быстрого кодирования следующим образом:

def mask_to_categorical(image, mask):
    mask = tf.one_hot(tf.cast(mask, tf.int32), 3)
    mask = tf.cast(mask, tf.float32)
    return image, mask
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...