【问题标题】:Calculating size of output of a Conv layer in CNN model计算 CNN 模型中 Conv 层的输出大小
【发布时间】:2017-04-20 01:15:41
【问题描述】:

在卷积神经网络中,如何知道特定卷积层的输出? (我正在使用keras构建CNN模型)

例如,如果我使用一维卷积层,其中 number_of_filters=20、kernel_size=10 和 input_shape(500,1)

 cnn.add(Conv1D(20,kernel_size=10,strides=1, padding="same",activation="sigmoid",input_shape=(Dimension_of_input,1)))

如果我使用的是二维卷积层,其中 number_of_filters=64, kernal_size=(5,100), input_shape= (5,720,1) (height,width,channel)

 Conv2D(64, (5, 100),
       padding="same",
       activation="sigmoid",
       data_format="channels_last",
       input_shape=(5,720,1)

上面两个conv层的输出个数是多少?有没有什么方程可以知道卷积神经网络中一个conv层的输出个数?

【问题讨论】:

    标签: neural-network keras conv-neural-network keras-layer


    【解决方案1】:

    是的,它有公式,您可以在CS231N course website 中找到它们。但由于这是一个编程站点,Keras 提供了一种简单的方法来以编程方式获取此信息,方法是使用模型的 summary 函数。

    model = Sequential()
    fill model with layers
    model.summary()
    

    这将在终端/控制台中打印所有图层信息,例如输入形状、输出形状和每个图层的参数数量。

    【讨论】:

      【解决方案2】:

      实际上,如果您想做的不仅仅是查看模型,model.summary() 函数可能不是您想要的。

      如果您想访问 Keras 模型的层,您可以使用 model.layers 来实现,它返回所有层(分配将它们存储为列表)。如果您想查看特定层,您可以简单地索引列表:

      list_of_layers = model.layers
      list_of_layers[5] # gives you the 6th layer
      

      您仍在使用的只是对象,因此您可能希望获得特定的值。您只需要指定要查看的属性即可:

      list_of_layers[-1].output_shape # returns output_shape of last layer
      

      返回模型中最后一层的 output_shape 元组。 如果您已经知道只想查看某个层的 output_shape 并执行以下操作,您甚至可以跳过整个列表分配的事情:

      model.layers[-1].output_shape # equivalent to the above method without storing in a list
      

      如果您想在构建模型时使用这些值以某种方式指导执行(添加池化层或进行填充等),这可能很有用。

      【讨论】:

        【解决方案3】:

        当我第一次使用 TensorFlow cnn 时,处理维度非常困难。下面是计算维度的一般场景:

        考虑

        1. 我们有一个尺寸为 (nXn) 的图像,过滤器尺寸:(fXf),无填充,无步幅适用: 卷积后维度为:(n-f+1,n-f+1)

        2. 图像尺寸 = (nXn) 和过滤器尺寸 = (fXf) 并且我们有填充:p 那么输出亮度为 = (n+2P-f+1,n+2P-f+1) 如果我们使用 Padding = 'SAME" 这意味着输出暗淡 = 输入暗淡在这种情况下等式看起来像:n+2P-f+1=n 所以从这里开始 p = (f-1)/2

        如果我们使用有效的填充,则意味着没有填充并且 p =0

        在计算机视觉中,如果 f 是偶数,f 通常是奇数,这意味着我们有不对称的填充。

        1. 当我们使用 stride = s 时的情况 输出亮度为 ( floor( ((n+2P-f)/s)+1 ), floor( ( (n+2P-f)/s)+1 ) )

        【讨论】:

          猜你喜欢
          • 2022-11-22
          • 2019-05-03
          • 2021-09-25
          • 2018-01-14
          • 2021-03-06
          • 1970-01-01
          • 2023-01-18
          • 1970-01-01
          • 2020-04-29
          相关资源
          最近更新 更多