Передача тензоров в качестве аргумента функции

#python #tensorflow #keras #tensorflow2.0 #tf.data.dataset

Вопрос:

я пытаюсь нормализовать tf.данные.Набор данных, как показано ниже:

 def normalization(image):
    print(image['label'])
    
    return 1
    

z = val.map(normalization) 
 

набор данных val выглядит следующим образом :

 <TakeDataset shapes: { id: (), image: (32, 32, 3), label: ()}, types: {id: tf.string, image: tf.uint8, label: tf.int64}>
 

и если я напечатаю один элемент, я смогу увидеть :

   { 'id': <tf.Tensor: shape=(), dtype=string, numpy=b'train_31598'>, 'image': <tf.Tensor: shape=(32, 32, 3), dtype=uint8, 
 numpy=    array([[[151, 130, 106],
            .....,
            [104,  95,  77]]], dtype=uint8)>, 'label': <tf.Tensor: shape=(), dtype=int64, numpy=50>}
 

Однако печать этого внутри моей функции выводит :

  'id': <tf.Tensor 'args_1:0' shape=() dtype=string>, 'image': <tf.Tensor 'args_2:0' shape=(32, 32, 3) dtype=uint8>, 'label': <tf.Tensor 'args_3:0' shape=() dtype=int64>}
 

поэтому я не могу выполнить какое-либо преобразование в свой массив изображений, потому что вместо массива тензоров у меня есть 'args_2:0'

Как я могу правильно передать каждый элемент в свою функцию нормализации?

Ответ №1:

Я попробовал ваш код на стандартном наборе данных, и он не работал. изображение[«метка»] неверно, потому что вы должны указать целое число. Вот моя модификация вашего кода:

 def normalization(image,label):
print(image[0])

return tf.cast(image, tf.float32) / 255., label


z = ds_train.map(normalization)