2016-12-15 2 views
0

Я начинаю с тензорным потоком, и я хочу реализовать MLP и обучать его на основе алгоритма обратного распространения, но когда я читал учебники, я обнаружил, что он использует optmizers, например «Stochastic Gradient Descent», и назвал его обратным распространением без реализации фаз алгоритма , Как происходит это распространение?Как использование тензорного потока используется для размножения при обучении модели?

ответ

1

Обычно вы используете эти оптимизаторы при первом определении функции потерь, а затем вызова оптимизатора .optimize на нем:

loss = some_loss(predicted_outputs, true_outputs) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate) 
train_op = optimizer.minimize(loss) 

Теперь, выполняя sess.run(train_op) сделает шаг в направлении градиентов весов, чтобы минимизировать потери.

+0

нормально, если я говорить о том, как обратном распространении 2 фазы Feedforward модели с данными и backpropgation для регулировки веса ,, то будет означать «tf.train.GradientDescentOptimizer()» является backpropgation pahse корректировать вес, чтобы минимизировать стоимость, это правда? –

+0

В некотором смысле да, так как «передний проход» реализуется тензором «потеря». Но вам нужно иметь в виду, что исполнение является ленивым в TF, и запуск 'sess.run (train_op)' заставит shadoworflow выполнить 'loss' в первую очередь. – sygi

+0

okeey, но что, если я изменю optmizer на другой, как adamoptmizer, это все еще backpropagation или нет, поскольку я знаю, что bp основан на GradientDescent, поэтому я использую его при обучении с помощью bp. –

0

Я думаю, это может помочь:

В работе [18], два подхода к спине распространяющихся градиентов через вычислительного графа описан. Первое, которое авторы ссылаются на на различие между символами и цифрами, получает набор значений ввода и затем вычисляет численные значения градиентов на этих входных значениях. Это делается путем явного пересечения графика сначала в прямом порядке (прямое распространение) для вычисления стоимости, , а затем в обратном порядке (обратное распространение) для вычисления градиентов с помощью правила цепи. Другим подходом, более важным для TensorFlow, является то, что [18] вызывает производные от символа к символу и [8] термины автоматически градиентное вычисление. В этом случае градиенты не вычисляются путем явной реализации алгоритма обратного распространения . Скорее, к вычислительному графу добавляются специальных узлов, которые вычисляют градиент каждой операции и, следовательно, в конечном итоге правило цепи. К выполняют обратное распространение, эти узлы должны просто выполняться , как и любые другие узлы с помощью механизма оценки графика. Таким образом, этот подход не дает требуемые производные в виде числового значения, , но только как символический дескриптор для вычисления этих значений.

Ссылка: http://arxiv.org/abs/1610.0117

Смежные вопросы