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

CNN模型中Conv层输出尺寸的计算

孟栋
2023-03-14

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

例如,如果我使用一维conv层,其中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)))

如果我使用的是二维conv层,其中\u过滤器的数量=64,内核大小=(5100),输入\u形状=(5720,1)(高度,宽度,通道)

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

以上两个conv层的输出数量是多少?在卷积神经网络中,有没有方程可以用来知道conv层的输出数?

共有3个答案

束帅
2023-03-14

当我第一次与TensorFlow cnn合作时,处理维度非常困难。以下是计算维度的一般场景:

考虑考虑

>

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

    图像的维数=(nXn)和过滤器维数=(fXf),我们有padding:p然后输出dims=(n 2P-f 1,n 2P-f 1)如果我们使用padding=‘SAME’,这意味着输出dims=输入dims,在这种情况下,方程如下所示:n 2P-f 1=n所以从这里p=(f-1)/2

    如果我们使用的是有效的填充,则表示没有填充,p=0

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

  • 牧甫
    2023-03-14

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

    如果您想访问Keras模型的层,可以使用模型进行访问。层,返回所有层(Assignment将其存储为列表)。如果要查看特定图层,只需为列表编制索引即可:

    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\u shape元组。如果您已经知道您只想查看某个层的output\u形状,并且只想执行以下操作,那么您甚至可以跳过整个列表分配操作:

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

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

    夏经武
    2023-03-14

    是的,有它的方程,你可以在CS231N课程网站上找到它们。但由于这是一个编程网站,Keras提供了一种通过使用模型摘要函数来编程获取这些信息的简单方法。

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

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

     类似资料:
    • 根据我对CNN的理解,扁平化用于从2D到1D,以便可以使用密集层进行分类。同样在我的理解中,扁平化的结果是过滤器的尺寸乘以过滤器的数量。 为什么扁平化后,第一个密集层不一定要与扁平化的结果具有相同的维度(这将是过滤器*过滤器的暗淡值)?第一个密集层的节点比扁平化的暗淡值更少或更大的CNN都可以工作,但我不知道为什么。扁平化不是应该为您提供密集层的输入吗?

    • 问题内容: 我是数据仓库的新手,但我认为我的问题相对容易回答。我建立了一个星型模式,其中包含一个尺寸表“ product”。该表具有列“ PropertyName”和列“ PropertyValue”。因此,维度看起来像这样: 等等。 在我的事实表中,我始终使用尺寸的替代键。由于PropertyName和PropertyValue列的原因,我的自然键不再是唯一的/无法识别,所以事实表中的行太多了。

    • 我刚刚完成了ANN课程,开始学习CNN。我对CNN中的填充和跨步操作有基本的了解。 但在第一层神经元映射输入图像有困难,但我对人工神经网络中输入特征如何映射到第一层有基本的了解。 理解输入图像和第一conv层神经元之间映射的最佳方法是什么? 如何澄清我对以下代码示例的疑虑?代码取自Coursera的DL课程。 每个大小为4*4*3的8个过滤器如何处理大小为64*64*3的输入图像? 步幅=1,填充

    • 我试图用PyTorch LSTM训练一个简单的2层神经网络,但我很难解释PyTorch留档。具体来说,我不太确定如何处理我的训练数据。 我想做的是通过小批次在一个非常大的数据集上训练我的网络,每个批次有100个元素长。每个数据元素将具有5个特征。留档声明层的输入应该是形状(seq_len,batch_size,input_size)。我应该如何调整输入? 我一直在关注这篇文章:https://di

    • 使用网格的列来设置输入框的大小,如 .large-6, .medium-6, 等。 更多网格系统知识,可以点击 相等大小列 以下演示了相等大小列的实例: 实例<form>   <div>     <div>       <label>medium-4 (100% on small, stacked)         <input type="text" placeholder="Name">   

    • 所以,我想做的是使用这里获得的开普勒数据对系外行星和非系外行星进行分类。数据类型是维度为(num_of_samples,3197)的时间序列。我发现这可以通过在Keras中使用1D卷积层来完成。但是我一直在弄乱维度并得到以下错误 检查模型输入时出错:预期conv1d_1_input有形状(无,3197,1),但得到了带有形状的数组(1, 570, 3197) 因此,问题是: 1.数据(traini