Короче говоря, я изо всех сил пытаюсь преобразовать маску категории изображения на пиксель в 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
Есть предложения? Спасибо!