Пользовательские слои в тензорном потоке - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь внести некоторые изменения в встроенную функцию dropout в tenorflow.Какова наилучшая процедура для этого?

Я хотел бы внести некоторые изменения в шагах прямого и обратного распространения.В реализации Tensorflow я могу найти только прямой проход, а не обратный проход.Я хотел бы изменить как прямой, так и обратный проход.

1 Ответ

0 голосов
/ 04 марта 2019

Вы можете использовать tf.custom_gradient , чтобы определить свой шаг вперед и назад в одном методе.Вот простой пример:

import tensorflow as tf

tf.InteractiveSession()

@tf.custom_gradient
def custom_multiply(a, x):
  # Define your own forward step
  y = a * x
  # Define your own backward step
  def grads(dy): return dy * x, dy * a + 100
  # Return the forward result and the backward function
  return y, grads

a, x = tf.constant(2), tf.constant(3)
y = custom_multiply(a, x)
dy_dx = tf.gradients(y, x)[0]
# It will print `dy/dx = 102` instead of 2 if the gradient is not customized
print('dy/dx =', dy_dx.eval())

Если вы хотите настроить свой собственный слой , просто замените основную функцию, используемую в tf.layers.Dropout.call, на вашу собственную.

...