【问题标题】:difference between convolution2d and conv2d in tensorflow in terms of ussagetensorflow中卷积2d和conv2d在使用上的区别
【发布时间】:2017-04-24 11:39:29
【问题描述】:

在用于 2D 卷积的 TensorFlow 中,我们有:

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,
             data_format=None, name=None) 

tf.contrib.layers.convolution2d(*args, **kwargs)
  • 我不确定差异?
  • 如果我想使用特殊的过滤器,我知道我应该使用第一个,对吗?但还有什么?尤其是关于输出?

谢谢

【问题讨论】:

    标签: filter tensorflow deep-learning convolution


    【解决方案1】:

    tf.nn.conv2d(...) 是 TensorFlow 提供的核心低级卷积功能。 tf.contrib.layers.conv2d(...) 是围绕 core-TensorFlow 构建的更高级别 API 的一部分。

    请注意,在当前的 TensorFlow 版本中,部分层现在也在核心中,例如tf.layers.conv2d.

    区别很简单,tf.nn.conv2d 是一个运算,只做卷积,没有别的。 tf.layers.conv2d 做得更多,例如它还为内核和偏差创建变量。

    查看使用 Tensorflow 核心 (here) 的 CNN 上的 Tensorflow 教程。使用低级 API,卷积层的创建方式如下:

    def conv2d(x, W):
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
    W_conv1 = weight_variable([5, 5, 1, 32])
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
    

    将其与 CNN 的 TF 层教程 (here) 进行比较。使用 TF 层,卷积层的创建方式如下:

    conv1 = tf.layers.conv2d(
      inputs=input_layer,
      filters=32,
      kernel_size=[5, 5],
      padding="same",
      activation=tf.nn.relu)
    

    在不知道您的用例的情况下:您很可能想使用tf.layers.conv2d

    【讨论】:

    • 嗨@sepidehsadatHoseyni,欢迎来到StackOverflow。这个答案对我来说看起来不错,而且您似乎也很满意,因此您应该将其标记为“已接受”。谢谢!
    【解决方案2】:

    在 Tensorflow 2.x 中 tf.keras.layers.Conv2Dtf.keras.layers.Convolution2D 之间没有区别。 Here's the link for the illustration

    在 tensorflow 2.x 中,kerastensorflow 中的 API

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多