#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. Возможно, это связано с тем, что мой вопрос не является явным.