我原以为添加了一个新的模块来完成中心池化。
我正在查看tensorflow代码,并且有一个名为gen_nn_ops.py
的文件,它通过传递" Maxpool"," AvgPool"等在内部调用另一个文件中的函数。用于执行所需计算的参数。
我想做中心池,选择窗口中的中心元素。我已为matlab和c ++版本准备好代码,但需要知道如何在TensorFlow中添加新模块以进行此类计算。还在哪里设置backpropogation代码。
答案 0 :(得分:9)
自定义池层可能会在C ++中实现。要查看您需要执行的操作,请查看tf.nn.max_pool_with_argmax()
的实施位置:
在tf.nn.max_pool_with_argmax()
中自动生成Python包装函数(gen_nn_ops.py
本身)。这最终会导入nn.py
,以便tf.nn
时显示在import tensorflow as tf
下。
在C ++中,有一个op registration in ops/nn_ops.cc
和一个kernel registration in kernels/maxpooling_op.cc
。
渐变在同一个地方被定义为单独的操作 - "MaxPoolWithArgmaxGrad"
。
添加新操作需要做大量的工作(请参阅this tutorial以获取更完整的指南),但希望这些指针可以提供帮助!