当前位置: 首页 > 知识库问答 >
问题:

卷积层的输出形状

郎嘉树
2023-03-14

我在Keras建立了一个卷积神经网络。

model.add(Convolution1D(nb_filter=111, filter_length=5, border_mode='valid', activation="relu", subsample_length=1))

根据CS231讲座,卷积操作为每个过滤器创建一个特征映射(即激活映射),然后将其堆叠在一起。在我的例子中,卷积层有一个300维的输入。因此,我预计会进行以下计算:

  • 每个过滤器的窗口大小为5。因此,每个滤波器产生300-5 1=296个卷积

但是,实际输出形状看起来不同:

convolutional_layer = model.layers[1]
conv_weights, conv_biases = convolutional_layer.get_weights()

print(conv_weights.shape) # (5, 1, 300, 111)
print(conv_biases.shape)  # (,111)

偏移值的形状很有意义,因为每个过滤器都有一个偏移值。然而,我不了解重量的形状。显然,第一个维度取决于过滤器的大小。第三个维度是输入神经元的数量,应该通过卷积来减少。最后一个维度可能是指过滤器的数量。这没有意义,因为我应该如何轻松获得特定过滤器的特征映射?

Keras使用Theano或Tensorflow作为后端。根据他们的文档,卷积操作的输出是4d张量(batch\u大小、output\u通道、output\u行、output\u列)。

有没有人能按照CS231的讲义给我解释一下输出形状?

共有2个答案

瞿文柏
2023-03-14

实际上这很有道理。您可以了解过滤器的重量。每个过滤器依次生成一个输出(即与输入数据对应的激活映射)。

您的conv_weights.shape的前两个轴是正在学习的过滤器的维度(正如您已经提到的)。您的filter_length是5 x 1。您的输入有300个维度,并且您希望每个维度获得111个过滤器,因此您最终得到300*111个大小为5*1权重的过滤器。

我假设维度#0的过滤器#0的特征映射类似于您的\u权重[:,:,0,0]。

沈琨
2023-03-14
  • 您的体重尺寸必须是[过滤器高度、过滤器宽度、通道内、通道外]
 类似资料:
  • 我在keras建立了一个ConvNet,这是其中的两层 第一层大小的输出,我完全理解,因为有8个大小为3x3的过滤器,每个过滤器都被应用于生成单独的特征图,因此 第二层的输出大小为24x24x16,我不理解。由于第二层的每个过滤器将作用于第一层输出的每个特征映射,因此输出的大小不应该是24x24x128吗? 基本上,我不明白一层的输出是如何馈送到另一层的输入的

  • 假设我们有一个5x5大小的图像和一个3x3大小的内核,带有跨步2和填充。通过神经网络中的卷积层后,输出图像的大小是多少。

  • 如果输入到神经网络卷积层的是128x128x3大小的图像,并对其应用40个5x5大小的滤波器,那么输出大小会是多少?

  • 卷积神经网络有一个批量过滤器, 持续不断的在图片上滚动收集图片里的信息,每一次收集的时候都只是收集一小块像素区域, 然后把收集来的信息进行整理, 这时候整理出来的信息有了一些实际上的呈现, 比如这时的神经网络能看到一些边缘的图片信息, 然后在以同样的步骤, 用类似的批量过滤器扫过产生的这些边缘信息, 神经网络从这些边缘信息里面总结出更高层的信息结构,比如说总结的边缘能够画出眼睛,鼻子等等. 再经过

  • Convolution1D层 keras.layers.convolutional.Convolution1D(nb_filter, filter_length, init='uniform', activation='linear', weights=None, border_mode='valid', subsample_length=1, W_regularizer=None, b_regu

  • Conv1D层 keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zero