【发布时间】: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