在卷积神经网络中,如何知道特定转换层的输出? (我使用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)
上述两个转换层的输出数量是多少?是否有任何方程可用于了解卷积神经网络中转换层的输出数量?
答案 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 时,处理维度非常困难。以下是计算维度的一般情况:
考虑
我们有一个尺寸为 (nXn) 的图像,过滤器尺寸为:(fXf),没有填充,没有步幅适用: 卷积后维数为:(n-f+1,n-f+1)
图像尺寸 = (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 通常是奇数,这意味着我们有不对称的填充。