我在keras建立了一个ConvNet,这是其中的两层
model.add(Conv2D(8 , 3 , input_shape = (28,28,1)))
model.add(Activation(act))
model.add(Conv2D(16 , 3))
model.add(Activation(act))
第一层大小26x26x8
的输出,我完全理解,因为有8个大小为3x3的过滤器,每个过滤器都被应用于生成单独的特征图,因此26x26x8
第二层的输出大小为24x24x16,我不理解。由于第二层的每个过滤器将作用于第一层输出的每个特征映射,因此输出的大小不应该是24x24x128吗?
基本上,我不明白一层的输出是如何馈送到另一层的输入的
如果有人花时间真正写出数学,我会很喜欢的。但我猜没人知道实际操作是什么。“适用于所有频道”的模棱两可的语言与OP的想法是一样的。上面的一位评论员用这种语言表示,他们在所有频道中汇总。不清楚。
我的问题和OP一样。我找到了答案。在Keras中,Conv2D层的卷积操作创建了一个与输入具有相同最终维度的过滤器。
假设您有一个形状(6,6,3)的输入X,一个大小为6×6的张量在3个通道(颜色或其他)中。然后创建一个2D卷积层
conv = Conv2D(2, 3, input_shape=(6, 6, 3))
将创建2个大小为(3、3、3)、f1和f2的过滤器。然后将每个过滤器以正确的方式应用于输入将看起来像f1ijk xijk,其中i和j在位置的所有相关索引上求和,而k(颜色通道)在所有值上求和,即此处的1、2和3。这为每个过滤器生成大小(4、4、1)的输出。两个过滤器一起生成大小(4、4、2)的输出。
如果我们假设,就像OP似乎所做的那样,3通道张量的每个过滤器都只有形状(3,3,1),那么您会困惑于如何处理它对3维张量的应用,这可能会导致关心实际操作的人认为过滤器将作为张量积应用,从而从层中创建更高维度的输出。
不,这是体积的卷积。每个滤波器适用于所有通道。
我在Keras建立了一个卷积神经网络。 根据CS231讲座,卷积操作为每个过滤器创建一个特征映射(即激活映射),然后将其堆叠在一起。在我的例子中,卷积层有一个300维的输入。因此,我预计会进行以下计算: 每个过滤器的窗口大小为5。因此,每个滤波器产生300-5 1=296个卷积 但是,实际输出形状看起来不同: 偏移值的形状很有意义,因为每个过滤器都有一个偏移值。然而,我不了解重量的形状。显然,第一
我正在从事一个语义分割项目,该项目涉及动态过滤器,以学习多尺度表示。 为了创建这些过滤器,我使用Unet主干并从瓶颈层提取特征图。特征图的大小为H x W X 512,其中H是特征图的高度,W是宽度,512是通道(图)的数量。 这些特征被传递到1x1卷积,以将滤波器的数量减少到H X W X 128,并且这些特征也被传递到自适应池层,以将H X W X 512减少到k X k X 512,其中k是
我正在实现一个三维卷积神经网络,我有两个问题。 问题一 每个输入是一个大小为(201,10,4)的3D矩阵。我希望我的过滤器能够在第二和第三维度上移动,因为它们是完全连接的。第三个维度是特征维度。所以我不想看第二和第三维度的当地社区。因此,我的过滤器大小将是例如(3,10,4)的大小。所以过滤器大小等于第二和第三维度,但我们在第一维度中有权重共享。以下是我的卷积代码: 所以我应该在这里使用步幅,这
该脚本可以在几分钟内在 CPU 上运行完。 结果示例: from __future__ import print_function import time import numpy as np from PIL import Image as pil_image from keras.preprocessing.image import save_img from keras import la
我问了一个关于我上周建立的一个网络的问题,我重复了一些建议,这些建议导致我发现了一些问题。我回到这个项目,解决了所有问题,并在这个过程中了解了更多关于CNN的信息。现在我陷入了一个问题:我所有的权重都变成了巨大的负值,再加上输出图像中的RELU端总是完全是黑色的(这使得分类器无法完成它的工作)。 在两个标记的图像上: 这些数据被传递到一个两层网络、一个分类器(它自己获得100%)和一个单过滤器3×
假设我们有一个5x5大小的图像和一个3x3大小的内核,带有跨步2和填充。通过神经网络中的卷积层后,输出图像的大小是多少。