Как создать контрольную точку TensorFlow без сеанса?
Я хочу ускорить инструмент для усреднения нескольких контрольных точек TensorFlow, но для простоты, скажем, мне нужно просто загрузить одну контрольную точку, возможно изменить некоторые переменные и сохранить ее на диск.
Текущая реализация загружает все переменные в массивы (3 секунды), подготавливает переменные tf (tf.get_variable()
), placeholder и assign_ops для каждой переменной (20 с), выполняет сеанс, где инициализирует все переменные (16 с), выполняет все назначения (81 с) и, наконец, сохраняет контрольную точку на диске (24 с). Общее время составляет 144 секунды.
Моя альтернативная реализация использует tf.get_variable(name, shape=numpy_array.shape, initializer=tf.constant_initializer(numpy_array))
и не заполнители, ни assign_ops, поэтому он сокращает общее время до 57 секунд. Тем не менее *.meta
В файле также хранятся все инициализаторы констант (поэтому он такой же большой, как и основной файл данных контрольных точек, что не совсем то, что мне нужно), и когда я применяю его на больших контрольных точках, он завершается неудачно из-за ограничения tf 2 ГБ.
Если загрузка всех переменных занимает 3 секунды, я считаю, что их хранение должно занять гораздо меньше 141 секунды и даже меньше 54 секунд. Есть ли способ написать диктовку? {var_name1: numpy_array1,...}
в файлы контрольной точки tf (повторное использование метаграфа из другой контрольной точки) без необходимости запуска сеанса tf? Я пытался перейти по ссылкам в связанном вопросе, но безуспешно.