【问题标题】:Dimensionality of strided convolution with stride 2 and max pooling layer步幅为 2 和最大池化层的步幅卷积的维数
【发布时间】:2019-12-15 15:39:55
【问题描述】:

这个问题不是关于跨步卷积与最大池化的好处。这篇文章旨在作为规范来源,介绍当输入图像的宽度和高度不同而填充相同时,如何计算跨步卷积和最大池的维度

我的研究:当图像宽度和高度不同而填充为“相同”时,我找不到任何公式可以正确计算卷积的输出,特别是对于 tensorflow。对于跨步卷积和最大池化,同样的问题仍然存在。

我知道post。但就像我之前说的,它不适用于不同的图像尺寸。我也知道这个post。但它没有回答填充相同的情况(在张量流中)。

但是,假设我有 240x320 大小的图像。我有 2 个版本的网络。

版本 A:

from tensorflow import layers as tf
x = tf.conv2d(input_im, filters=64, kernel_size=3, strides=1, padding='SAME')
x = tf.conv2d(x, filters=64, kernel_size=3, strides=1, padding='SAME')
x = tf.conv2d(x, filters=64, kernel_size=3, strides=2, padding='SAME')

B 版:

from tensorflow import layers as tf
x = tf.conv2d(input_im, filters=64, kernel_size=3, strides=1, padding='SAME')
x = tf.conv2d(x, filters=64, kernel_size=3, strides=2, padding='SAME')
x = tf.max_pooling(x, 2, 2, padding='SAME')

我的问题如下。在版本 A 和 B 的每一层之后,在给定上述输入图像大小的情况下,输出尺寸是多少?如果我在 Keras 中执行此操作,我会简单地使用 model.summary();但是,我正在使用 tensorflow 并且没有这样的等效功能。我无法在我正在处理的远程机器上运行 tensorboard。

【问题讨论】:

    标签: python tensorflow deep-learning


    【解决方案1】:

    您可以通过以下方式获得结果张量的形状。

    import tensorflow as tf
    
    input_im = tf.placeholder(tf.float32, shape=[None, 320, 240, 3])
    x = tf.layers.conv2d(input_im, filters=64, kernel_size=3, strides=1, padding='SAME')
    print('After conv1', x.shape)
    x = tf.layers.conv2d(x, filters=64, kernel_size=3, strides=1, padding='SAME')
    print('After conv2', x.shape)
    x = tf.layers.conv2d(x, filters=64, kernel_size=3, strides=2, padding='SAME')
    print('After conv3', x.shape)
    
    

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 1970-01-01
      • 2017-10-15
      • 2022-01-05
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2019-07-24
      • 2019-11-06
      相关资源
      最近更新 更多