【问题标题】:Concatenation layer in tensorflow张量流中的连接层
【发布时间】:2018-04-11 14:06:36
【问题描述】:

给定图像中看到的 2 个 3D 张量 t1 = [?, 1, 1, 1, 2048]t2 = [?, 3, 1, 1, 256],它们将如何连接?目前,我正在使用:

tf.concat([t1, t2], 4)

但是,鉴于我的架构有大量层级和许多级联,我最终会得到一个太大(就通道/特征而言)而无法初始化的张量。 这是实现串联层的正确方法吗?

【问题讨论】:

    标签: python tensorflow neural-network deep-learning conv-neural-network


    【解决方案1】:

    首先,inception 层中张量的形状并不像你定义的那样。 1x11x33x1 是应用于图像的滤镜的形状。卷积中还有两个参数:paddingstriding,根据它们的确切值,结果形状可能会有很大的不同。

    在这种特殊情况下,空间形状不会改变,只有channels 维度将是2048256,这就是它们可以连接的原因。原始t1t2 的串联会导致错误。

    这是实现连接层的正确方法吗?

    是的,特征图连接是初始网络的关键思想之一,它的实现确实使用了tf.concat(例如,参见inception v1 source code)。

    请注意,此张量将沿一个方向(通道/特征)增长,但由于下采样而在空间维度上收缩,因此不会变得太大。另请注意,此张量是转换后的输入数据(图像),因此与权重不同,它没有被初始化,而是流动通过网络。权重将是张量 1x1x2048=20481x3x224=6723x1x256=768 等 - 你可以看到它们根本不是很大,这是 inception 网络的另一个想法。

    【讨论】:

    • 感谢您的帮助。图中橙色箭头表示残差学习的捷径。最近有人告诉我,这不是简单的串联,“而是跳过和未跳过的频道的总和”。如果你熟悉这个主题,你介意告诉我如何在 tensorflow 中实现它吗?
    • @DevinHaslam 简而言之,这是一个简单的plus 操作,如图所示。但是您可能还需要用零填充尺寸以匹配两个张量的形状(通道数发生变化)。如果您提出特定问题,我很乐意为您详细解答。
    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多