如何在张量流中编写自定义池模块?

时间:2016-02-09 17:53:12

标签: machine-learning tensorflow

我原以为添加了一个新的模块来完成中心池化。

我正在查看tensorflow代码,并且有一个名为gen_nn_ops.py的文件,它通过传递" Maxpool"," AvgPool"等在内部调用另一个文件中的函数。用于执行所需计算的参数。

我想做中心池,选择窗口中的中心元素。我已为matlab和c ++版本准备好代码,但需要知道如何在TensorFlow中添加新模块以进行此类计算。还在哪里设置backpropogation代码。

1 个答案:

答案 0 :(得分:9)

自定义池层可能会在C ++中实现。要查看您需要执行的操作,请查看tf.nn.max_pool_with_argmax()的实施位置:

  1. tf.nn.max_pool_with_argmax()中自动生成Python包装函数(gen_nn_ops.py本身)。这最终会导入nn.py,以便tf.nn时显示在import tensorflow as tf下。

  2. 在C ++中,有一个op registration in ops/nn_ops.cc和一个kernel registration in kernels/maxpooling_op.cc

  3. kernel itself is defined in kernels/maxpooling_op.cc

  4. 渐变在同一个地方被定义为单独的操作 - "MaxPoolWithArgmaxGrad"

  5. 添加新操作需要做大量的工作(请参阅this tutorial以获取更完整的指南),但希望这些指针可以提供帮助!