Keras层输出维度的计算

Calculation of Keras layers output dimensions

我目前正在尝试使用 theano 后端在 Keras 中实现 GoogLeNet 架构 (InceptionV1),因为我想使用 GoogLeNet 模型为 CUB 数据集生成特征。

我在 Keras 中找到了一个实现 here

但是,它基于 Keras 的早期版本,我必须根据 Keras 版本 2 对图层进行更改。

现在,模型正在正确构建。但是,predict() 函数失败,错误为

ValueError: CorrMM images and kernel must have the same stack size

所以,我开始查看原始 paper 并将论文中提到的层与已实现的层相关联。

所以,在这里我发现第一层的输出为 112x112x64,输入为 224x224x3.

但是,当我尝试根据斯坦福大学教程 page 中给出的公式计算预期输出维度时,它与我从 Keras 代码收到的实际输出不同,尽管这是是根据 GoogLeNet 论文的预期输出。即根据斯坦福页面上提到的公式 Output height or length = ((Input height or length - filter size + 2 * Padding) / Stride) + 1

根据上面的等式,输出维度以小数形式出现,这是无效的,为了根据公式获得预期的维度,输入的形状需要为 227x227x3。但是,在 Keras 中,使用此输入,输出为 114x114x64.

Keras 是否以某种不同的方式计算输出维度,还是我遗漏了什么?

昨天我可以通过从模型中删除几行代码来改变尺寸,从而使它工作。 (可能是早期版本的 Keras 和 Theano 需要的)

此外,与论文中提到的相反,我将 MaxPooling2D() 函数的补丁大小从 3x3 更改为 2x2,这是在 GoogLeNet 架构中实现所需输出尺寸的唯一方法。输入形状为 224x224 并应用最大池化,补丁大小为 2x2,步幅为 2x2,其尺寸减半,我们可以获得所需的输出形状。

我不确定为什么基于输入、过滤器、填充和步幅作为参数的输出维度方程在这里不适用。