计算CNN模型中Conv层的输出大小

时间:2017-04-20 01:15:41

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

在卷积神经网络中,如何知道特定转换层的输出? (我使用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)(高度,宽度,通道)

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

上述两个转换层的输出数量是多少?是否有任何方程可用于了解卷积神经网络中转换层的输出数量?

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

实际上,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

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

答案 2 :(得分:0)

当我第一次使用 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 ) )