【问题标题】:Calculation of Keras layers output dimensionsKeras层输出维度的计算
【发布时间】:2018-06-25 00:09:55
【问题描述】:

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

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

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

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

ValueError: CorrMM 图像和内核必须具有相同的堆栈大小

所以,我开始查看原始的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 在 keras.applications 包中已经有 GoogleNet 的实现,称为 InceptionV3,无需再次实现。
  • 没有。 InceptionV3 不是 GoogLeNet。 GoogLeNet 在论文中首次被介绍为 Inception 架构,因此它是 InceptionV1,而 InceptionV3 是它的第 3 个变体。但我希望 InceptionV1 实现一些其他的论文。

标签: keras theano keras-layer keras-2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2019-01-21
    相关资源
    最近更新 更多