计算 CNN 模型中 Conv 层的输出大小
Calculating size of output of a Conv layer in CNN model
在卷积神经网络中,如何知道特定卷积层的输出? (我正在使用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)
上面两个conv层的输出个数是多少?有什么方程式可以用来知道卷积神经网络中一个conv层的输出数量吗?
是的,它有方程式,您可以在 CS231N course website 中找到它们。但由于这是一个编程站点,Keras 通过使用模型的 summary
函数提供了一种以编程方式获取此信息的简单方法。
model = Sequential()
fill model with layers
model.summary()
这将在 terminal/console 中打印所有层信息,例如每层的输入形状、输出形状和参数数量。
实际上,如果您想做的不仅仅是查看模型,model.summary()
功能可能不是您要找的。
如果您想访问 Keras 模型的层,您可以使用 model.layers
来实现,其中 returns 所有层(赋值将它们存储为列表)。如果您随后想查看特定层,您可以简单地索引列表:
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
如果您想在构建模型时使用这些值以某种方式指导执行(添加池化层或进行填充等),这可能会很有用。
当我第一次使用 TensorFlow cnn 时,处理维度非常困难。以下是计算尺寸的一般情况:
考虑
我们有一个尺寸为 (nXn) 的图像,过滤器尺寸:(fXf),没有填充,没有应用步幅:
卷积后维度为:(n-f+1,n-f+1)
图像维度 = (nXn) 和过滤器维度 = (fXf) 我们有填充:p
然后输出调光 = (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 是偶数,则意味着我们有不对称填充。
- 我们使用 stride = s 的情况
输出暗淡是 ( floor( ((n+2P-f)/s)+1 ),floor( ( (n+2P-f)/s)+1 ) )
在卷积神经网络中,如何知道特定卷积层的输出? (我正在使用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)
上面两个conv层的输出个数是多少?有什么方程式可以用来知道卷积神经网络中一个conv层的输出数量吗?
是的,它有方程式,您可以在 CS231N course website 中找到它们。但由于这是一个编程站点,Keras 通过使用模型的 summary
函数提供了一种以编程方式获取此信息的简单方法。
model = Sequential()
fill model with layers
model.summary()
这将在 terminal/console 中打印所有层信息,例如每层的输入形状、输出形状和参数数量。
实际上,如果您想做的不仅仅是查看模型,model.summary()
功能可能不是您要找的。
如果您想访问 Keras 模型的层,您可以使用 model.layers
来实现,其中 returns 所有层(赋值将它们存储为列表)。如果您随后想查看特定层,您可以简单地索引列表:
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
如果您想在构建模型时使用这些值以某种方式指导执行(添加池化层或进行填充等),这可能会很有用。
当我第一次使用 TensorFlow cnn 时,处理维度非常困难。以下是计算尺寸的一般情况:
考虑
我们有一个尺寸为 (nXn) 的图像,过滤器尺寸:(fXf),没有填充,没有应用步幅: 卷积后维度为:(n-f+1,n-f+1)
图像维度 = (nXn) 和过滤器维度 = (fXf) 我们有填充:p 然后输出调光 = (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 是偶数,则意味着我们有不对称填充。
- 我们使用 stride = s 的情况 输出暗淡是 ( floor( ((n+2P-f)/s)+1 ),floor( ( (n+2P-f)/s)+1 ) )