Python 如何在自定义Op中变异Tensorflow变量?

Python 如何在自定义Op中变异Tensorflow变量?,python,tensorflow,Python,Tensorflow,我试图修改simple,这样它就不会创建一个新的张量作为返回值,但它实际上改变了输入张量并返回它。我知道这是可能的,因为scatterOp正在做同样的事情,但是看看scatterOp源代码,鉴于我缺乏C++经验,我无法准确地找出该做什么 #包括“tensorflow/core/framework/op.h” #包括“tensorflow/core/framework/shape_inference.h” 使用名称空间tensorflow; 寄存器操作(“调零”) .输入(“至零:int32”)

我试图修改simple,这样它就不会创建一个新的张量作为返回值,但它实际上改变了输入张量并返回它。我知道这是可能的,因为
scatter
Op
正在做同样的事情,但是看看
scatter
Op
源代码,鉴于我缺乏
C++
经验,我无法准确地找出该做什么

#包括“tensorflow/core/framework/op.h”
#包括“tensorflow/core/framework/shape_inference.h”
使用名称空间tensorflow;
寄存器操作(“调零”)
.输入(“至零:int32”)
.输出(“归零:int32”)
.SetShapeFn([](::tensorflow::shape_推理::推理上下文*c){
c->设置输出(0,c->输入(0));
返回状态::OK();
});
#包括“tensorflow/core/framework/op_kernel.h”
使用名称空间tensorflow;
类ZeroOutOp:公共操作内核{
公众:
显式zerootop(OpKernelConstruction*context):OpKernel(context){}
无效计算(OpKernelContext*上下文)覆盖{
//抓住输入张量
张量输入\u张量=上下文->可变输入(0,真);
自动输入=输入_张量.flat();
//我们总是返回输入ref。
上下文->将输入转发到输出(0,0);
//将输出张量的第一个元素以外的所有元素设置为0。
const int N=input.size();
对于(int i=1;i
如果我编译上述代码并运行一个简单的
Python
脚本来测试它,我会得到以下错误:

Python(14820,0x700003a7e000) malloc: *** error for object 0x7fd5c45a5a88: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

我需要在代码中更改什么才能满足我的需要?

我认为您最好修改获取输入和输出的过程。实际上,根据你的寄存器,它不是参考输入,所以

context->mutable_input(0, true)
会是

context->input(0)
此外,设置输出将更改为

context->set_output(0, context->input(0))
我认为在设置输出后它会工作