#neural-network #tensorflow #autoencoder
#нейронная сеть #tensorflow #автоэнкодер
Вопрос:
Я пытаюсь реализовать «Глубокую сверточную обратную графическую сеть» с помощью tensorflow, и это означает, что мне приходится делать сложные вещи с градиентом.
В принципе, я хочу разделить автоэнкодер на две независимые сети. Мне не обязательно, но это было бы удобно. Цель состоит в том, чтобы применить некоторые неописуемые модификации к градиенту, текущему на этапе обратного распространения. У вас есть какие-либо идеи, как это можно сделать? Вот схема того, чего я хочу достичь:
Легко видеть, что для прямого пути это означает получение выходных данных одной сети и подключение их к другой. К сожалению, я не могу увидеть, как выполнить обратное распространение ошибки.
Моя лучшая идея на данный момент — дублировать одну из весовых матриц, т. Е. скопировать W3 в кодировщик как W2.5, а затем скопировать градиент W3 как градиент W2.5. Но в этой схеме должен быть более простой способ или очевидное недоразумение.
Комментарии:
1. Один из способов, которым вы могли бы это сделать, — встроить вашу среду, отличную от TF, в оператор Tensorflow. Затем Tensorflow может позаботиться о распространении активаций вперед и градиентов назад.
tf.py_func
это один из способов вызвать нетензорный поток из графика Tensorflow; другой способ — определить пользовательский оператор C . Можно определить пользовательские функции градиента для операторов (см. github.com/tensorflow/tensorflow/issues/1095 о том, как это сделать с помощью tf.py_func); ваш пользовательский градиент может творить любые невыразимые ужасы, какие вам нравятся.