Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修改内置TensorFlow内核的最佳方法_Tensorflow - Fatal编程技术网

修改内置TensorFlow内核的最佳方法

修改内置TensorFlow内核的最佳方法,tensorflow,Tensorflow,我想学习修改TensorFlow内置操作符内核的最佳方法。 例如,我想修改tensorflow/core/kernels/resize_bicubic_op.cc中static const double A的值。我想出了两种可能的方法: 直接修改它并重新编译整个TensorFlow库。该解决方案的问题是:A.这会影响所有使用双三次插值的函数。这需要我重新编译整个库,从二进制文件安装时不起作用 将其定义为自定义op。问题是在源代码中,没有寄存器op。我不知道如何为这个双三次函数编写寄存器,以及是否

我想学习修改TensorFlow内置操作符内核的最佳方法。 例如,我想修改tensorflow/core/kernels/resize_bicubic_op.cc中static const double A的值。我想出了两种可能的方法:

直接修改它并重新编译整个TensorFlow库。该解决方案的问题是:A.这会影响所有使用双三次插值的函数。这需要我重新编译整个库,从二进制文件安装时不起作用

将其定义为自定义op。问题是在源代码中,没有寄存器op。我不知道如何为这个双三次函数编写寄存器,以及是否需要进行其他修改

还有其他更好的方法吗


谢谢。

解决此问题的最佳方法是构建自定义操作。有关如何添加自定义操作的更多详细信息,请参阅。OP的寄存器OP调用处于启用状态

另一种替代方法是重新使用相同的op注册,并使用替代实现注册一个新内核。这将使您能够使用实验API为ResizeBicubic op选择替代实现。例如,您可以在Python程序中执行以下操作:

_ = tf.load_op_library(...)  # Load the .so containing your implementation.

with tf.get_default_graph().kernel_label_map({"ResizeBicubic": "my_impl"}):
  images = tf.image.resize_bicubic(...)  # Will use your implementation.

…并添加一个内核注册,用C++代码指定标签MyAuIMPL:

template <typename Device, typename T>
class MyResizeBicubicOp<Device, T> : public OpKernel {
  // Custom implementation goes here...
}

#define REGISTER_KERNEL(T)                            \
  REGISTER_KERNEL_BUILDER(Name("ResizeBicubic")       \
                              .Device(DEVICE_CPU)     \
                              .Label("my_impl")       \
                              .TypeConstraint<T>("T") \
                              .HostMemory("size"),    \
                          MyResizeBicubicOp<CPUDevice, T>);

TF_CALL_REAL_NUMBER_TYPES(REGISTER_KERNEL);

谢谢你,先生。这两种方法我都试过了,而且都奏效了。但是,性能非常差。自定义op比内置的resize_双三次体慢10倍。我直接从Tensorflow的resize_bicubic实现中复制了代码,除了添加这个新op所需的修改之外,我没有做任何更改。这正常吗?10倍的减速令人惊讶。在构建扩展时,您是否检查了编译器优化标志是否相同?我使用教程中提供的命令:TF_INC=$python-c'import tensorflow as TF;printf.sysconfig.get_include';g++-std=c++11-共享zero_out.cc-o zero_out.so-fPIC-I$TF_INCTry passing-O2-DNDEBUG.Yes。这就解决了减速问题。是否可以更新教程?