Можно ли определить граф в собственном TensorFlow и затем преобразовать этот граф в модель Keras?
Мое намерение - просто объединить (для меня) лучшее из двух миров.
Мне очень нравится API модели Keras для создания прототипов и новых экспериментов, т. Е. Использование удивительного multi_gpu_model(model, gpus=4)
для обучения с несколькими графическими процессорами, сохранение / загрузка весов или целых моделей с помощью oneliners, все удобные функции, такие как .fit()
, .predict()
и др.
Однако я предпочитаю определять свою модель в нативном TensorFlow. Менеджеры контекста в TF великолепны, и, на мой взгляд, гораздо проще реализовать с ними такие вещи, как GAN:
with tf.variable_scope("Generator"):
# define some layers
with tf.variable_scope("Discriminator"):
# define some layers
# model losses
G_train_op = ...AdamOptimizer(...)
.minimize(gloss,
var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
scope="Generator")
D_train_op = ...AdamOptimizer(...)
.minimize(dloss,
var_list=tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES,
scope="Discriminator")
Еще один бонус - структурирование графика таким образом. В TensorBoard отладка сложных нативных моделей Keras является адом, поскольку они вообще не структурированы. При интенсивном использовании переменных областей в собственном TF вы можете «распутать» график и посмотреть на очень структурированную версию сложной модели для отладки.
Используя это, я могу напрямую настроить пользовательскую функцию потерь, и мне не нужно ничего замораживать во время каждой итерации обучения, поскольку TF будет обновлять веса только в правильной области, что (по крайней мере, на мой взгляд) намного проще, чем Keras решение, чтобы перебрать все существующие слои и установить .trainable = False
.
TL; DR:
Короче говоря: мне нравится прямой доступ ко всему в TF, но в большинстве случаев простой модели Keras достаточно для обучения, логического вывода ... позже. API модели намного проще и удобнее в Keras.
Следовательно, я бы предпочел настроить график в нативном TF и преобразовать его в Keras для обучения, оценки и так далее. Есть ли способ сделать это?