我正在尝试遵循本教程 https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html
在基准模型中
model.add(Conv2D(32, (3, 3), input_shape=(3, 150, 150)))
我在这里不太遵循输出形状。如果输入形状为3x150x150,内核尺寸为3x3,输出形状不是3x148x148吗? (假设没有填充)。但是,根据Keras Doc:
输出形状:具有以下形状的4D张量:(批,过滤器,new_rows, new_cols)
在我看来,输出形状将为32x148x148。我的问题是这种理解是否正确?如果是这样,其他过滤器从哪里来?
答案 0 :(得分:1)
如果输入形状为(3, 150, 150)
,则在应用Conv2D图层后,输出为(?, 32, 148, 148)
。通过以下示例进行检查:
inps = Input(shape=(3, 150, 150))
conv = Conv2D(32, (3, 3), data_format='channels_first')(inps)
print(conv)
>> Tensor("conv2d/BiasAdd:0", shape=(?, 32, 148, 148), dtype=float32)
?
符号指定的第一个尺寸是批量大小。32
)。148
)。通道如何从3变为32?假设我们有RGB图像(3通道),输出通道大小为1。发生以下情况:
使用filters=32
和kernel_size=(3,3)
时,将创建32个不同的滤镜,每个滤镜的形状为(3,3,3)。结果将带来32个不同的卷积。请注意,根据Keras,所有内核均在开始时由glorot_uniform
初始化。
此blog post的图片。