Тензор потока в GoogleML с TFrecords: OutOfRangeError (см. Выше трассировку): конец последовательности - PullRequest
0 голосов
/ 29 ноября 2018

Наш Tensorflow обучается успешно (но медленно), когда мы запускаем его локально (на ПК без графического процессора).Но он не тренируется, когда мы отправляем его в GoogleML (один графический процессор).Без изменений в коде или введенных данных.

Ошибка возникает при чтении данных из TFrecords.Вот некоторые из соответствующих кодов:

files = tf.data.Dataset.list_files(XXXX)
dataset = files.apply(tf.contrib.data.parallel_interleave(tf.data.TFRecordDataset, cycle_length=XXXX, sloppy=True, buffer_output_elements=XXXX))

dataset = dataset.apply(tf.contrib.data.map_and_batch(map_func=_parse_transform_function, batch_size=config.batch_size, num_parallel_calls=config.num_parallel_calls))
dataset = dataset.repeat()
dataset = dataset.prefetch(config.prefetch)

files = tf.data.Dataset.list_files(XXXX)
dataset = files.apply(tf.contrib.data.parallel_interleave(tf.data.TFRecordDataset, cycle_length=XXXX, sloppy=True, buffer_output_elements=XXXX))

dataset = dataset.apply(tf.contrib.data.map_and_batch(map_func=_parse_transform_function, batch_size=config.batch_size, num_parallel_calls=config.num_parallel_calls))
dataset = dataset.repeat()
dataset = dataset.prefetch(config.prefetch)

training_iterator = dataset.make_one_shot_iterator()
handle = tf.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(handle, dataset.output_types, dataset.output_shapes)
next_element = iterator.get_next()

...

with tf.Session() as sess:
    training_handle = sess.run(training_iterator.string_handle())
    for i in range(config.epochs):
        _image, _landmarks, _height, _width, _size, _kp_true, _short_offsets_true, _long_offsets_true = sess.run(next_element, feed_dict={handle: training_handle})

Вот ошибка, которую мы получаем:

ОШИБКА 2018-11-28 15:32:55 -0800 service OutOfRangeError (см. Выше дляtraceback): конец последовательности ОШИБКА 2018-11-28 15:32:55 -0800 service [[Node: IteratorGetNext = IteratorGetNextoutput_shapes = [[?, 416,416,3], [?, 34,5], [?], [?], [?], [?, 52,52,11], [?, 52,52,22], [?, 52,52,40]], output_types = [DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_INT32, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device = "/ job: localhost / replica: 0 / task: 0 / device: CPU: 0"]]

Опять мы не изменили данные иликод, поэтому мы считаем, что у нас нет ошибок в коде Tensorflow.Почему одна и та же реализация не может обучаться в GoogleML?

1 Ответ

0 голосов
/ 30 ноября 2018

«OutOfRangeError (см. Выше для отслеживания): конец последовательности» вводит в заблуждение.Кажется, это указывает на то, что мы достигли конца записей, но это не так.

Проблема заключалась в том, что в операции "_parse_transform_function" (не показана) использовалась операция, не поддерживаемая в графическом процессоре.

Решение: используйте "с tf.device ('/ cpu:0 '): "вокруг части набора данных кода, чтобы использовать ЦП для предварительной обработки.Графический процессор все еще используется для обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...