Как выполнить итерацию по объекту TensorSliceDataset в Tensorflow

#python #loops #tensorflow #tensor

#python #циклы #tensorflow #тензор

Вопрос:

У меня есть Dataset объект tensorflow, созданный с помощью набора данных CIFAR-100.Мне нужно получить доступ к меткам поездов TensorSpec внутри Dataset объекта.Доступ к нему по индексу невозможен, поскольку TensorSliceDataset объект не поддерживает индекс.Как получить доступ к каждому TensorSpec и выполнить итерацию по значениям внутри него.

 (train_data, train_labels), (test_data, test_labels) = cifar100.load_data(label_mode='fine')
with open('data/cifar100/cifar100_labels.json', 'r') as j:
    cifar_labels = json.load(j)

dataset = tf.data.Dataset.from_tensor_slices((train_data,train_labels))
print(train_dataset.element_spec)

# (TensorSpec(shape=(32, 32, 3), dtype=tf.uint8, name=None), 
# TensorSpec(shape=(1,), dtype=tf.int64, name=None))
  

Ответ №1:

Вы можете превратить метки в массив:

 import tensorflow as tf

(train_data, train_labels), (test_data, test_labels) = tf.keras.datasets.mnist.load_data()

dataset = tf.data.Dataset.from_tensor_slices((train_data,train_labels))

next(dataset.batch(60_000).as_numpy_iterator())[1]
  
 array([5, 0, 4, ..., 5, 6, 8], dtype=uint8)
  

Это то, что вы ищете?

Комментарии:

1. спасибо за ваш ответ. Мне нужно применить функцию фильтра для объекта Dataset и применить маску как для меток, так и для данных. маска генерируется с помощью меток. Я мог бы сделать это до создания объекта Dataset с использованием np-массивов. tensorflow.org/api_docs/python/tf/data/Dataset#filter