如何在tensorflow中实现一个自定义op,该op使用来自正向过程的中间数据更快地计算其梯度? 我试图在TysFooad中实现一个自定义的OP,它代表了在GPU上使用EGEN计算C++中的计算重传递函数。我想通过重新计算使用它的输出时得到的一些中间值来加速运算的梯度(也在C++中求速度)。
在的源代码中,我们看到许多函数已经在某种程度上通过重新使用op的输出来计算其导数来实现这一点。以下是乙状结肠的示例:如何在tensorflow中实现一个自定义op,该op使用来自正向过程的中间数据更快地计算其梯度? 我试图在TysFooad中实现一个自定义的OP,它代表了在GPU上使用EGEN计算C++中的计算重传递函数。我想通过重新计算使用它的输出时得到的一些中间值来加速运算的梯度(也在C++中求速度)。,tensorflow,customization,derivative,Tensorflow,Customization,Derivative,在的源代码中,我们看到许多函数已经在某种程度上通过重新使用op的输出来计算其导数来实现这一点。以下是乙状结肠的示例: template <typename T> struct scalar_sigmoid_gradient_op { EIGEN_EMPTY_STRUCT_CTOR(scalar_sigmoid_gradient_op) EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T operator()(const T&
template <typename T>
struct scalar_sigmoid_gradient_op {
EIGEN_EMPTY_STRUCT_CTOR(scalar_sigmoid_gradient_op)
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const T
operator()(const T& output, const T& output_gradient) const {
return output_gradient * output * (T(1) - output);
}
模板
结构标量_sigmoid _梯度_op{
本征空结构向量(标量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量向量
本征设备函数本征强内联常数
运算符(){
返回输出梯度*输出*(T(1)-输出);
}
但是,我不知道如何访问输出以外的内容,例如,在向前传递过程中存储的其他值,以加速导数的计算
我曾考虑过在运算中添加第二个输出,包含导数所需的所有数据,并用它计算实际输出的梯度,但我还没能使它工作。我不确定它在原则上是否能工作 我设想的另一种方法是手动修改完整的图形(前进和后退属性),将op的输出直接快捷地指向它的派生块。我不知道怎么做 否则,可能有一个我不知道的数据存储方案,它允许我在op的前向过程中存储数据,并在梯度计算期间检索数据 谢谢您的关注,如果有任何想法,我将不胜感激。
D“我曾考虑在运算中添加第二个输出,包含导数所需的所有数据,并将其用于计算实际输出的梯度,但我还没有设法使其起作用。”这是我尝试的,它应该起作用。下面是一个使用graph editor重新布线图形的示例--