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,其尺寸减半,我们可以获得所需的输出形状。
我不确定为什么基于输入、过滤器、填充和步幅作为参数的输出维度方程在这里不适用。
我目前正在尝试使用 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,其尺寸减半,我们可以获得所需的输出形状。
我不确定为什么基于输入、过滤器、填充和步幅作为参数的输出维度方程在这里不适用。