【问题标题】:Conv2D: How can I get the values of each filterConv2D:如何获取每个过滤器的值
【发布时间】:2018-09-23 09:24:03
【问题描述】:

我的模特:

classifier = Sequential()

# Convolutional + MaxPooling -> 1
classifier.add(Conv2D(32, (3,3), input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)))
convout1 = Activation('relu')
classifier.add(convout1)
classifier.add(MaxPooling2D(pool_size = (2,2)))
classifier.add(Dropout(0.25))

我正在运行以下代码来获取权重

classifier.layers[0].get_weights()[0]

它返回一个3x3x3x32 的数组。它不应该返回3x3的32个矩阵吗?

【问题讨论】:

    标签: machine-learning neural-network keras keras-layer convolutional-neural-network


    【解决方案1】:

    不,返回值具有正确的形状。您没有考虑的是 32 个过滤器中的每一个在空间维度上都是 3x3,并且具有三个通道,与输入相同。这意味着每个过滤器也适用于通道维度。您所期望的只有在对单通道图像进行 2D 卷积的情况下才有效。

    【讨论】:

      【解决方案2】:

      权重形状是正确的,因为卷积滤波器应用于整个 3D 输入体积,并且不同通道的参数不共享(尽管它们在空间上共享)。图片来自CS231n class

      是的,输出体积是通过对整个深度体积的卷积求和得到的,但是每个通道中的参数不同。

      在您的情况下,通道是 RGB(因为 input_shape = (IMAGE_SIZE, IMAGE_SIZE, 3)),空间过滤器大小是 3x3 并且有 32 过滤器。因此结果形状为3x3x3x32,每个过滤器的形状为3x3x3

      【讨论】:

        猜你喜欢
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2018-01-16
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多