Замена узла в графе пользовательской операцией, имеющей переменную зависимость в тензорном потоке

Я пытаюсь заменить вычисление, выполненное на графике, пользовательским операцией, которая делает то же самое.

Допустим, граф имеет константу 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 есть два Ws, один из исходного графа def и один в импортированном графе. Когда мы запускаем оперу поезда, пользовательская операция заканчивается чтением старого W и новый W обновляется. В результате градиентный спуск в конечном итоге не в состоянии сделать правильную вещь.

Проблема в том, что создание экземпляра custom_op требует тензора ввода W, Новый W известен только после импорта. И для импорта требуются пользовательские операции. Как обойти эту проблему?

1 ответ

Не могли бы вы уточнить, какую версию Tensorflow вы используете: r0.08, r0.09, r0.10, r0.11?

Это невозможно изменить оп на графике с другой оп. Но если вы можете получить доступ к W, вы все равно можете сделать резервную копию W (используя deepcopy() из модуля копирования), прежде чем запускать поезд, который его обновит?

С уважением

Другие вопросы по тегам