首页 文章

Keras层输出尺寸的计算

提问于
浏览
0

我目前正在尝试使用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是否以某种不同的方式计算输出尺寸,或者我错过了什么?

1 回答

  • 0

    不知怎的,我昨天可以通过从模型中删除几行代码来使其改变尺寸 . (可能是早期版本的Keras和Theano所要求的)

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

    我不确定为什么基于输入,滤波器,填充和步幅作为参数的输出尺寸方程在这里不适用 .

相关问题