隐藏卷积层的输入和输出如何组织?

时间:2020-04-06 23:40:57

标签: tensorflow keras

我需要帮助来了解tensorflow如何将数据从一个卷积层组织到下一个卷积层。这样做的动机是我试图实现自定义层,而不了解如何组织输出数据或如何处理输入数据。

假设网络中的第一个隐藏层在NumFilt过滤器上实现了2-D卷积,并且数据具有单个通道,并且为最后通道格式。因此,滤波器张量的形状为K x L x 1 x NumFilt,其中K和L是滤波器的高度和宽度。另外,输入数据的格式为NumBatch x Height x Width x1。为简单起见,假定填充为“ SAME”。

第一层的输出是尺寸为NumBatch x高x宽x NumFilt的4-D张量,不是吗?如果第二层还使用相同的滤波器实现了2D卷积,则它将每个NumFilt滤波器应用于来自先前层的每个NumFilt输出通道。因此,第二层的输出应为NumBatch x高度x宽度x NumFilt * NumFilt,不是吗?

我的问题:第二层的正确行为是在其输入的通道尺寸上进行迭代,以便可以将数据重新格式化为NumFilt个单独的张量,每个张量的大小为NumBatch x Height x Width x 1,这样conv2d可以是拜访他们每个人?然后,每个卷积的输出将存储在输出张量的第四维中的NumFilt * NumFilt空间之一中。

我的困惑源于我没有在tensorflow / keras源代码中实现此行为的事实。我看到的是对_Conv类中的卷积函数的简单调用:

    outputs = K.conv2d(
        inputs,
        self.kernel,
        strides=self.strides,
        padding=self.padding,
        data_format=self.data_format,
        dilation_rate=self.dilation_rate)

,并且没有重新格式化/重组或输入张量的循环。如果此函数的输入张量为NumBatch x高度x宽度x NumFilt,并且内核为L x P x 1 x NumFilt,则上述内容将引发异常,因为两者之间的通道数不匹配。

0 个答案:

没有答案