Есть ли способ узнать, использовались ли `.repeat` / `.batch` / `.shuffle` в наборе данных tensorflow?

#python #tensorflow #deep-learning #eager-execution

#python #tensorflow #глубокое обучение #нетерпеливого выполнения

Вопрос:

Получается уже созданный объект набора данных tensorflow ( tf.data.Dataset ) с именем data .

Есть ли способ узнать, была ли вызвана функция repeat / batch / shuffle для этого объекта, путем проверки данных? (и, возможно, получить другую информацию, такую как аргумент batch и repeat)

(Я предполагаю быстрое выполнение)

редактировать 1: кажется, что метод str содержит некоторую информацию. Изучая это.

правка 2: атрибут output_shapes предоставляет информацию о размере и формах пакета.

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

1. очевидно, что batch_size можно получить, вызвав get_next.

2. определите «путем проверки данных»? Вы имеете в виду просмотр выходных данных?

3. Я имею в виду просмотр атрибутов / методов данных объекта

Ответ №1:

Единственное решение, о котором я мог подумать, — это войти в код tensorflow. gen_dataset_ops.py генерируется во время сборки из исходного кода, поэтому его можно было найти только локально.

Есть другой файл dataset_ops.py , он доступен по ссылке ниже. Вы просто вставляете оператор print перед возвратом соответствующей функции. Например, функция shuffle из dataset_ops.py :

 def shuffle(self, buffer_size, seed=None, reshuffle_each_iteration=None):
"""Randomly shuffles the elements of this dataset.
...
print('Dataset shuffled') #inserted print here
return ShuffleDataset(self, buffer_size, seed, reshuffle_each_iteration)
  

Объект Dataset обернут в DatasetV1Adapter , поэтому вы ничего не можете знать об этом заранее. Единственное отличие в режиме ожидания заключается в том, что он поддерживает явную итерацию, но будет крайне неэффективно делать что-то вроде

 array = np.random.rand(10)
dataset = tf.data.Dataset.from_tensor_slices(array)
if len([i for i in dataset]) != array.shape[0]:
    print('repeated')
  

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/data/ops/dataset_ops.py

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

1. У нас нет доступа к array

2. У нас есть только объект dataset

3. Это скорее встречный пример. Я обновил ответ, это грубо, но это работает

4. Я думаю, вам следует удалить в своем ответе часть о режиме ожидания. Это вводит в заблуждение.

5. Возможно, это связано с тем, что мой вопрос не является явным.