最近在整理论文的代码,想写得简洁一点,多用些高级API,但是遇到了很多问题。 不知道出于什么原因,Tensorflow中很多具有相同功能的函数,有不同的API。例如,2-D卷积。
目前就我知道的conv2d方法有4个:
tf.nn.conv2d, tf.layers.conv2d, tf.contrib.layers.conv2d, slim.conv2d
.
1. Implement
slim
系列应该已经不是宠儿了,好多方法都被废止。
其它三个方法,除了参数的差异之外,基本没什么不同,其实现都是一样的。
tf.nn.conv2d
tf.nn.conv2d 定义在tensorflow/python/ops/gen_nn_ops.py.
调用了gen_nn_ops.conv2d()
tf.layers.conv2d
tf.layers.conv2d 也是调用了gen_nn_ops.conv2d()
, 只不过比较绕:
定义在tensorflow/python/layers/convolutional.py.
->Conv2d
->_Conv
->base.Layer
其中,在_Conv
中,override了base.Layer
的call
,用来调用nn_ops.Convolution
类,在该类中,调用了gen_nn_ops.conv2d()
。最后,base.Layer.apply()
完成tf.layers.conv2d()
的activity_regularizer
tf.contirb.layers.conv2d
定义在tensorflow/contrib/layers/python/layers/layers.py.
->tensorflow/python/layers/convolutional.py.
就是比前者多了一层调用。
2. Difference
首先就是参数不再一样,这点很明显。 其次就是一些细节不一样。
具体来说,我还没找到、、、、、