如果在图片中看到2个3D张量t1 = [?, 1, 1, 1, 2048]
和t2 = [?, 3, 1, 1, 256]
,它们将如何连接?目前,我正在使用:
tf.concat([t1, t2], 4)
然而,鉴于我的架构有大量具有许多连接的层,我最终会有一个太大的(在通道/特征方面)初始化的张量。 这是实现连接图层的正确方法吗?
答案 0 :(得分:3)
首先,初始层中的张量形状与您定义的不同。 1x1
,1x3
和3x1
是应用于图片的过滤器的形状。卷积中还有两个参数: padding 和 striding ,根据它们的确切值,结果形状可能会有很大不同。
在这种特殊情况下,空间形状不会改变,只有channels
维度为2048
和256
,这就是它们可以连接的原因。原始t1
和t2
的串联将导致错误。
这是实现连接层的正确方法吗?
是的,特征映射连接是初始网络的关键思想之一,其实现确实使用tf.concat
(例如参见Picture of the structure)。
请注意,此张量将在一个方向(通道/特征)上增长,但由于下采样而在空间维度上收缩,因此它不会变得太大。还要注意,这个张量是变换后的输入数据(图像),因此与权重不同,它不是初始化的,而是流通过网络。权重将是张量1x1x2048=2048
,1x3x224=672
,3x1x256=768
等等 - 您可以看到它们根本不是很大,这是初始网络的另一个想法。