【问题标题】:Deconvolutions/Transpose_Convolutions with tensorflow使用张量流的反卷积/Transpose_Convolutions
【发布时间】:2017-10-05 16:47:57
【问题描述】:

我正在尝试使用tf.nn.conv3d_transpose,但是,我收到一个错误,表明我的过滤器和输出形状不兼容。

  • 我有一个大小为 [1,16,16,4,192] 的张量
  • 我正在尝试使用 [1,1,1,192,192] 的过滤器
  • 我相信输出形状会是 [1,16,16,4,192]
  • 我正在使用“相同”的填充和 1 的步幅。

最终,我希望输出形状为 [1,32,32,7,“没关系”],但我试图先让一个简单的案例起作用。

由于这些张量在常规卷积中是兼容的,我相信相反的反卷积也是可能的。

为什么不能对这些张量进行反卷积。我能否获得一个有效滤波器大小和输出形状的示例,用于对形状为 [1,16,16,4,192] 的张量进行反卷积

谢谢。

【问题讨论】:

    标签: tensorflow conv-neural-network deconvolution


    【解决方案1】:
    • 我有一个大小为 [1,16,16,4,192] 的张量
    • 我正在尝试使用 [1,1,1,192,192] 的过滤器
    • 我相信输出形状会是 [1,16,16,4,192]
    • 我正在使用“相同”的填充和 1 的步幅。

    是的,输出形状将是 [1,16,16,4,192]

    这是一个显示尺寸兼容的简单示例:

    import tensorflow as tf
    
    i = tf.Variable(tf.constant(1., shape=[1, 16, 16, 4, 192]))
    
    w = tf.Variable(tf.constant(1., shape=[1, 1, 1, 192, 192]))
    
    o = tf.nn.conv3d_transpose(i, w, [1, 16, 16, 4, 192], strides=[1, 1, 1, 1, 1])
    
    print(o.get_shape())
    

    除了维度之外,您的实现中肯定还有其他问题。

    【讨论】:

    • 感谢您的帮助。这些信息帮助我几乎立即解决了我的问题。我的问题是我这样调用 conv3d_transpose: o = tf.nn.conv3d_transpose(i, [1, 1, 1, 192, 192], [1, 16, 16, 4, 192], strides=[1 , 1, 1, 1, 1])。非常愚蠢的问题,但我是 tensorflow 的新手,我自己永远不会意识到这个问题。真是太感谢你了。
    • 使用您在此处提供的实现,我遇到了一些问题。有时我的过滤器尺寸有很多通道。例如 [16,16,7,3298],这里也有描述:stackoverflow.com/questions/46955515/…。有些人建议我将过滤器大小(您的实现中的“w”)拆分为更小的张量。在这里这样做是否有意义,或者首先拥有一个具有 3298 个通道的过滤器没有意义?你也做过聘请的辅导/帮助吗?
    • @DevinHaslam 我一开始绝对不会使用 3298 频道。为什么要使用这么多?我从来没有聘请过家教,我真的没有时间,抱歉。
    • 这是我正在复制的架构:i.stack.imgur.com/1qLP2.png 如您所见,有许多层和几个连接指示(橙色箭头是残差学习的快捷方式)。有大量通道的原因是由于我正在做的串联。我使用 tf.concat,我沿着通道的轴连接。这听起来正确吗?是否有另一种连接方式不会使我的频道变得如此之大?谢谢!
    • @DevinHaslam 特征数与通道数相同。但是残差连接(如arxiv.org/pdf/1512.03385.pdf 中所定义)不是串联,而是跳过和未跳过通道的总和。然而,橙色线的通道在初始 B 和 C 中不匹配。橙色线开头和结尾的通道大小必须相同才能使它们相加成为可能。要么图片中的数字有误,要么橙色线不是残留连接。
    猜你喜欢
    • 2017-09-12
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2016-06-29
    相关资源
    最近更新 更多