tf.nn.conv2d和tf.layers.conv2d

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mundane_World/article/details/80894618

 最近在整理论文的代码,想写得简洁一点,多用些高级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.Layercall,用来调用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

   首先就是参数不再一样,这点很明显。 其次就是一些细节不一样。
具体来说,我还没找到、、、、、

猜你喜欢

转载自blog.csdn.net/Mundane_World/article/details/80894618