我目前正在尝试使用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是否以某种不同的方式计算输出尺寸,或者我错过了什么?
答案 0 :(得分:0)
不知怎的,我昨天可以通过从模型中删除几行代码来改变维度。 (可能早期版本的Keras和Theano需要它)
另外,与本文中提到的相反,我将MaxPooling2D()函数的补丁大小从3x3更改为2x2,这是在GoogLeNet架构中实现所需输出维度的唯一方法。使用输入形状224x224并应用最大池,补丁大小为2x2,步长为2x2,其尺寸减半,我们可以获得所需的输出形状。
我不确定为什么基于输入,滤波器,填充和步幅作为参数的输出尺寸方程在这里不适用。