Интеграция каталога примеров TFRecord в обучение модели

TFdoe спросил: 13 октября 2017 в 07:49 в: python

Какой самый эффективный способ подачи данных из нескольких файлов TFRecord для обучения модели Tensorflow? В моем текущем процессе я перебираю примеры из TFRecords, раздельно извлекая примеры в переменные Python , но я не верю, что это правильный способ сделать это.

Я перехожу из Keras в Tensorflow, надеясь увидеть некоторые улучшения скорости в моем рабочем процессе. С этой целью я переместил свои данные в TFRecord, и теперь я пытаюсь понять, как запустить базовые модели линейной регрессии с каталогом файлов TFRecord. Я дошел до того, что могу прочитать TFRecord в Tensor и обучить такими партиями (код взят из примера начала работы Tensorflow и затем изменен):

# Model parameters
W = tf.Variable([.1], dtype=tf.float32)
b = tf.Variable([.1], dtype=tf.float32)# Model input and output
x = tf.placeholder(tf.float32)
linear_model = W*x + b
y = tf.placeholder(tf.float32)# loss
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.1)
train = optimizer.minimize(loss)# Transforms a scalar string `example_proto` into a pair of a scalar string and
# a scalar integer, representing an image and its label, respectively.
def _parse_function(example_proto):
    keys_to_features = {
        "X": tf.FixedLenFeature([40], tf.float32),
        "Y": tf.FixedLenFeature([10], tf.float32)
    }
    example = tf.parse_single_example(example_proto, keys_to_features)
    return example["X"][0], example["Y"][0]filenames = tf.placeholder(tf.string, shape=[None])
dataset   = tf.data.TFRecordDataset(filenames, "ZLIB")
dataset   = dataset.map(_parse_function)
dataset   = dataset.repeat()
dataset   = dataset.batch(1024)
iterator  = dataset.make_initializable_iterator()
next_element = iterator.get_next()# training loop
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
sess.run(iterator.initializer, feed_dict = { filenames: training_filenames })
for i in range(10):
    **x_train, y_train = sess.run(iterator.get_next())**
    sess.run(train, {x: x_train, y: y_train})

Моя проблема в том, что я не верю, что это соответствует намеченному, наиболее эффективному рабочему процессу набора данных, возможному с Tensorflow. В частности, какой смысл извлекать данные из двоичного файла в переменную python и затем вводить их в процесс обучения? (строка ниже)

    **x_train, y_train = sess.run(iterator.get_next())**

У меня сложилось впечатление, что должен быть способ подачи двоичных данных в сессию для более непосредственного обучения, но после прочтения учебников по TF, примеры и другие сообщения о переполнении стека. Я ничего не нашел.


0 ответов