Наш 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?