Замена узла в графе пользовательской операцией, имеющей переменную зависимость в тензорном потоке
Я пытаюсь заменить вычисление, выполненное на графике, пользовательским операцией, которая делает то же самое.
Допустим, граф имеет константу A
и переменная веса W
Я создаю пользовательскую операцию, чтобы взять эти два входа и выполнить все вычисления (кроме последнего шага обновления веса):
custom_op_tensor = custom_module.custom_op([A,W])
g_def = tf.get_default_graph().as_graph_def()
input_map = { tensor.name : custom_op_tensor }
train_op, = tf.import_graph_def(g_def, input_map=input_map, return_elements=[train_op])
После импорта графа def есть два W
s, один из исходного графа def и один в импортированном графе. Когда мы запускаем оперу поезда, пользовательская операция заканчивается чтением старого W
и новый W
обновляется. В результате градиентный спуск в конечном итоге не в состоянии сделать правильную вещь.
Проблема в том, что создание экземпляра custom_op требует тензора ввода W
, Новый W
известен только после импорта. И для импорта требуются пользовательские операции. Как обойти эту проблему?
1 ответ
Не могли бы вы уточнить, какую версию Tensorflow вы используете: r0.08, r0.09, r0.10, r0.11?
Это невозможно изменить оп на графике с другой оп. Но если вы можете получить доступ к W, вы все равно можете сделать резервную копию W (используя deepcopy() из модуля копирования), прежде чем запускать поезд, который его обновит?
С уважением