如何在 TensorFlow 中定义自己的运算符
How do I define my own operators in TensorFlow
在 TensorFlow 中,我们可以使用 tf.nn.l2_loss()
进行 L2 正则化。假设我想为 L1 正则化定义自己的正则化运算符(称之为 tf.nn.l1_loss()
)。我该怎么办?我很难在 TensorFlow 源代码中找到运算符定义。
正如评论所建议的那样,adding an op to TensorFlow 有一个操作指南。本指南介绍如何添加用 C++ 实现的新操作。一般来说,你应该在以下情况下这样做:
- 该运算无法使用现有的 TensorFlow 运算来实现(例如,
l1_loss
可以 使用现有的 element-wise and reduction 运算符作为 Python 函数).
- 出于性能(或内存消耗)原因,需要 C++ 实现。
- op 可以作为 op 的组合来实现,但是它的梯度可以比计算梯度 op 更有效地计算(或具有更好的数值稳定性)-通过操作。 (这就是为什么
tf.nn.l2_loss
在 C++ 中被实现为一个融合操作。)
在 TensorFlow 中,我们可以使用 tf.nn.l2_loss()
进行 L2 正则化。假设我想为 L1 正则化定义自己的正则化运算符(称之为 tf.nn.l1_loss()
)。我该怎么办?我很难在 TensorFlow 源代码中找到运算符定义。
正如评论所建议的那样,adding an op to TensorFlow 有一个操作指南。本指南介绍如何添加用 C++ 实现的新操作。一般来说,你应该在以下情况下这样做:
- 该运算无法使用现有的 TensorFlow 运算来实现(例如,
l1_loss
可以 使用现有的 element-wise and reduction 运算符作为 Python 函数). - 出于性能(或内存消耗)原因,需要 C++ 实现。
- op 可以作为 op 的组合来实现,但是它的梯度可以比计算梯度 op 更有效地计算(或具有更好的数值稳定性)-通过操作。 (这就是为什么
tf.nn.l2_loss
在 C++ 中被实现为一个融合操作。)