Я переключаю свой старый уровень данных (с использованием очередей) на «новый» и рекомендуемый API набора данных. Я использую его впервые, поэтому привожу примеры кода на случай, если у меня что-то в корне не так.
Я создаю свой набор данных из генератора (который будет читать файл и предоставлять n образцов). Это небольшой набор данных и n_iterations >> n_samples, поэтому я просто хочу читать этот набор данных снова и снова, в идеале в случайном порядке.
sample_set = tf.data.Dataset.from_generator( data_generator(filename),
(tf.uint8, tf.uint8), (tf.TensorShape([256,256,4]), tf.TensorShape([256,256,1]))
)
с генератором данных:
class data_generator:
def __init__(self, filename):
self.filename= filename
def __call__(self):
with filename.open() as f:
for idx in f: yield img[idx], label[idx]
Чтобы использовать данные, я понял, что мне нужно определить Iterator
sample = sample_set.make_one_shot_iterator().get_next()
а затем мы настроены на чтение данных
while True:
try: my_sample = sess.run(sample)
except tf.errors.OutOfRangeError: break # this happens after dset is read once
Но все доступные итераторы кажутся «конечными» в том смысле, что они читают набор данных только один раз.
Есть ли простой способ сделать чтение из набора данных бесконечным?