Несмотря на то, что тензор потока очень рекомендует не использовать устаревшие функции, которые будут заменены объектами tf.data, кажется, нет хорошей документации для чистой замены устаревшей для современного подхода.Более того, учебники Tensorflow по-прежнему используют устаревшую функциональность для обработки файлов (Учебное пособие по чтению данных: https://www.tensorflow.org/api_guides/python/reading_data).
С другой стороны, хотя есть хорошая документация для использования «современного» подхода (Импорт данных)учебное пособие: https://www.tensorflow.org/guide/datasets), все еще существуют старые учебные пособия, которые, вероятно, приведут многих, как и меня, к тому, чтобы сначала использовать устаревший учебник, поэтому хотелось бы аккуратно перевести устаревший на «современный» подход ипример для этого перевода, вероятно, будет очень полезен.
#!/usr/bin/env python3
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import shutil
import os
if not os.path.exists('example'):
shutil.rmTree('example');
os.mkdir('example');
batch_sz = 10; epochs = 2; buffer_size = 30; samples = 0;
for i in range(50):
_x = np.random.randint(0, 256, (10, 10, 3), np.uint8);
plt.imsave("example/image_{}.jpg".format(i), _x)
images = tf.train.match_filenames_once('example/*.jpg')
fname_q = tf.train.string_input_producer(images,epochs, True);
reader = tf.WholeFileReader()
_, value = reader.read(fname_q)
img = tf.image.decode_image(value)
img_batch = tf.train.batch([img], batch_sz, shapes=([10, 10, 3]));
with tf.Session() as sess:
sess.run([tf.global_variables_initializer(),
tf.local_variables_initializer()])
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
for _ in range(epochs):
try:
while not coord.should_stop():
sess.run(img_batch)
samples += batch_sz;
print(samples, "samples have been seen")
except tf.errors.OutOfRangeError:
print('Done training -- epoch limit reached')
finally:
coord.request_stop();
coord.join(threads)
Этот код отлично работает для меня, вывод на консоль:
10 samples have been seen
20 samples have been seen
30 samples have been seen
40 samples have been seen
50 samples have been seen
60 samples have been seen
70 samples have been seen
80 samples have been seen
90 samples have been seen
100 samples have been seen
110 samples have been seen
120 samples have been seen
130 samples have been seen
140 samples have been seen
150 samples have been seen
160 samples have been seen
170 samples have been seen
180 samples have been seen
190 samples have been seen
200 samples have been seen
Done training -- epoch limit reached
Как видно, он использует устаревшие функции иобъекты как tf.train.string_input_producer () и tf.WholeFileReader (). Требуется эквивалентная реализация с использованием «современного» tf.data.Dataset.
РЕДАКТИРОВАТЬ:
Найден уже приведенный пример импорта данных CSV: Замена входных конвейеров на основе очереди tf.data . Я хотел бы bКак можно полнее здесь, и предположим, что больше примеров лучше, поэтому я не считаю это повторным вопросом.