Я пишу функцию отображения для набора данных в Tensorflow 2. Набор данных содержит несколько изображений и соответствующие метки, более конкретно, есть только три возможных значения для меток, 13, 17 и 34. Предполагается, что функция отображения возьмите метки и преобразуйте их в категориальные метки.
Возможно, есть более эффективные способы реализации этой функции (пожалуйста, не стесняйтесь предлагать), но это моя реализация:
def map_labels(dataset):
def convert_labels_to_categorical(image, labels):
labels = [1.0, 0., 0.] if labels == 13 else [0., 1.0, 0.] if labels == 17 else [0., 0., 1.0]
return image, labels
categorical_dataset = dataset.map(convert_labels_to_categorical)
return categorical_dataset
Основное проблема в том, что я получаю сообщение об ошибке ниже:
OperatorNotAllowedInGraphError: using a `tf.Tensor` as a Python `bool` is not allowed: AutoGraph is disabled in this function. Try decorating it directly with @tf.function.
Я действительно понятия не имею, что означает эта ошибка, и в inte rnet не так много других источников, документирующих ту же ошибку. Есть идеи?
EDIT (новая нерабочая реализация):
def map_labels(dataset):
def convert_labels_to_categorical(image, labels):
labels = tf.Variable([1.0, 0., 0.]) if tf.reduce_any(tf.math.equal(labels, tf.constant(0,dtype=tf.int64))) \
else tf.Variable([0., 1.0, 0.]) if tf.reduce_any(tf.math.equal(labels, tf.constant(90,dtype=tf.int64))) \
else tf.Variable([0., 0., 1.0])
return image, labels
categorical_dataset = dataset.map(convert_labels_to_categorical)
return categorical_dataset