0

我正在尝试对 tensorflow 中的内置 dropout 函数进行一些更改。这样做的最佳程序是什么?

我想对正向和反向传播步骤进行一些更改。在Tensorflow 实现中,我只能找到正向传递而不是反向传递。我想修改前向和后向传球。

4

1 回答 1

1

您可以使用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您自己的即可。

于 2019-03-04T06:01:12.777 回答