当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.raw_ops.GRUBlockCellGrad用法及代码示例


计算 1 个时间步的 GRU 单元 back-propagation。

用法

tf.raw_ops.GRUBlockCellGrad(
    x, h_prev, w_ru, w_c, b_ru, b_c, r, u, c, d_h, name=None
)

参数

  • x 一个Tensor。必须是以下类型之一:float32
  • h_prev 一个Tensor。必须与 x 具有相同的类型。
  • w_ru 一个Tensor。必须与 x 具有相同的类型。
  • w_c 一个Tensor。必须与 x 具有相同的类型。
  • b_ru 一个Tensor。必须与 x 具有相同的类型。
  • b_c 一个Tensor。必须与 x 具有相同的类型。
  • r 一个Tensor。必须与 x 具有相同的类型。
  • u 一个Tensor。必须与 x 具有相同的类型。
  • c 一个Tensor。必须与 x 具有相同的类型。
  • d_h 一个Tensor。必须与 x 具有相同的类型。
  • name 操作的名称(可选)。

返回

  • Tensor 对象的元组(d_x、d_h_prev、d_c_bar、d_r_bar_u_bar)。
  • d_x 一个Tensor。具有与 x 相同的类型。
  • d_h_prev 一个Tensor。具有与 x 相同的类型。
  • d_c_bar 一个Tensor。具有与 x 相同的类型。
  • d_r_bar_u_bar 一个Tensor。具有与 x 相同的类型。

Args x:GRU 单元的输入。 h_prev:来自前一个 GRU 单元的状态输入。 w_ru:重置和更新门的权重矩阵。 w_c:单元连接门的权重矩阵。 b_ru:复位和更新门的偏置向量。 b_c:单元连接门的偏置向量。 r:复位门的输出。 u:更新门的输出。 c:单元连接门的输出。 d_h:h_new wrt 到目标函数的梯度。

返回 d_x:x wrt 到目标函数的梯度。 d_h_prev:h wrt 到目标函数的梯度。 d_c_bar c_bar wrt 到目标函数的梯度。 d_r_bar_u_bar r_bar 和 u_bar 对目标函数的梯度。

这个内核操作实现了以下数学方程:

注意变量的符号:

a 和 b 的连接由 a_b 表示 a 和 b 的逐元素点积由 ab 表示逐元素点积由 \circ 表示 矩阵乘法由 * 表示

为清楚起见的附加说明:

w_ru 可以分割成 4 个不同的矩阵。

w_ru = [w_r_x w_u_x
        w_r_h_prev w_u_h_prev]

同样,w_c 可以分割成 2 个不同的矩阵。

w_c = [w_c_x w_c_h_prevr]

偏见也是如此。

b_ru = [b_ru_x b_ru_h]
b_c = [b_c_x b_c_h]

关于符号的另一个说明:

d_x = d_x_component_1 + d_x_component_2

where d_x_component_1 = d_r_bar * w_r_x^T + d_u_bar * w_r_x^T
and d_x_component_2 = d_c_bar * w_c_x^T

d_h_prev = d_h_prev_component_1 + d_h_prevr \circ r + d_h \circ u
where d_h_prev_componenet_1 = d_r_bar * w_r_h_prev^T + d_u_bar * w_r_h_prev^T

下面梯度背后的数学:

d_c_bar = d_h \circ (1-u) \circ (1-c \circ c)
d_u_bar = d_h \circ (h-c) \circ u \circ (1-u)

d_r_bar_u_bar = [d_r_bar d_u_bar]

[d_x_component_1 d_h_prev_component_1] = d_r_bar_u_bar * w_ru^T

[d_x_component_2 d_h_prevr] = d_c_bar * w_c^T

d_x = d_x_component_1 + d_x_component_2

d_h_prev = d_h_prev_component_1 + d_h_prevr \circ r + u

下面的计算是在梯度的 python 包装器中执行的(不在梯度内核中。)

d_w_ru = x_h_prevr^T * d_c_bar

d_w_c = x_h_prev^T * d_r_bar_u_bar

d_b_ru = sum of d_r_bar_u_bar along axis = 0

d_b_c = sum of d_c_bar along axis = 0

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.raw_ops.GRUBlockCellGrad。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。