Я хотел бы знать, возможно ли (и если да, то как?) Использовать объект tf.data.Dataset
, к которому tf.contrib.data.prefetch_to_device()
был применен с итератором с возможностью подачи. Мое оригинальное неоптимизированное определение набора данных:
training_dataset_shuffle_batch = tf.data.Dataset.from_tensor_slices(training_data).shuffle(dataset_size).repeat().batch(minibatch_size).prefetch(minibatch_size)
training_shuffle_batch_iterator = training_dataset_shuffle_batch.make_initializable_iterator()
и я переписал это
training_dataset_shuffle_batch = tf.data.Dataset.from_tensor_slices(training_data)
training_dataset_shuffle_batch = training_dataset_shuffle_batch.apply(tf.contrib.data.shuffle_and_repeat(buffer_size = dataset_size))
training_dataset_shuffle_batch = training_dataset_shuffle_batch.batch(minibatch_size)
training_dataset_shuffle_batch = training_dataset_shuffle_batch.apply(tf.contrib.data.prefetch_to_device(gpu_names[0]))
training_shuffle_batch_iterator = training_dataset_shuffle_batch.make_initializable_iterator()
потому что я запускаю это на экземпляре AWS p3.2xlarge с графическим процессором, поэтому я хотел бы префектировать данные в графический процессор для повышения эффективности.
В любой версии мой итератор и сборщик данных определены как
handle = tf.placeholder(tf.string, shape=[])
iterator = tf.data.Iterator.from_string_handle(handle, training_dataset_shuffle_batch.output_types, training_dataset_shuffle_batch.output_shapes)
next_input_data_element = iterator.get_next()
Позже я пытаюсь получить дескриптор для training_shuffle_batch_iterator
через training_shuffle_batch_handle = sess.run(training_shuffle_batch_iterator.string_handle())
использовать с iterator
(есть другие итераторы объектов набора данных, из которых я хочу получить данные при использовании next_input_data_element
). Хотя все в порядке, когда я использую первое определение набора данных, второе завершается ошибкой AttributeError: '_PrefetchToDeviceIterator' object has no attribute 'string_handle'
.
Я делаю это правильно, и это просто не поддерживается, или в моем подходе есть ошибка? Это использует TF V1.8.0. Спасибо.