【问题标题】:input preprocessing in KerasKeras 中的输入预处理
【发布时间】:2018-01-20 09:44:57
【问题描述】:

我对 Keras 中的输入预处理有疑问。

如果你看预处理源代码

https://github.com/keras-team/keras/blob/master/keras/applications/imagenet_utils.py#L149

默认预处理模式似乎是 Caffe。他们的sn-p代码也直接使用它

https://github.com/fchollet/deep-learning-models

我的问题是,为什么 Keras 不检查 Keras.backend() 以找到正确的模式并适当地进行预处理?这可能是一个错误吗?

我的后端是 tensorflow,所以我想知道直接运行他们示例中提供的代码是否是个好主意。

谢谢

【问题讨论】:

    标签: neural-network keras


    【解决方案1】:

    每个模型都有自己的预处理。

    有些人从您展示的代码中进行预处理(其中明确声明为mode='caffe')。一些模型声明了自己的预处理。始终从与您尝试实例化的模型相同的模块中导入预处理函数,以便导入正确的函数。

    该模式适合模型的构建方式。如果模型是使用caffe 模式构建的,那么它只能在遵循该规范的输入下正常工作。

    同样适用于所有其他模式。


    Tensorflow 还是 Theano?

    这并不重要。 Keras 确实可以正确处理这些格式。
    正如您在该源代码中看到的那样,keras 有K.image_data_format(),它取自您的默认配置(您可以在keras.json 文件中找到您的默认配置,通常是channels_last)。

    无论您使用的是 Theano 还是 Tensorflow,Keras 都会正确处理格式。我建议,除非您有理由或明确的偏好,否则您将配置与channels_last 保持原样。这使得将卷积层与其他层和损失函数集成起来变得更加容易。 keras 中的所有内容都倾向于在最后一个轴上工作,因此,将通道也留在最后一个位置以避免额外的工作。

    【讨论】:

    • 谢谢。我的印象是 Keras 的作者使用与他们的名字相对应的预处理来训练神经网络。预处理似乎不仅仅是通道顺序。如果您看到 cmets,似乎 mode = 'caffe' 只进行居中,而 mode = 'tensorflow' 也进行缩放
    • keras.io/applications ..Resnet50 不是唯一一个使用 input_preprocessing 而不改变模式的..
    • 是的,caffe 居中,但范围保持在 255。Tensorflow 重新缩放。但这些对于“系统”来说并不是真正必要的。您可以使用 tensorflow 并创建一个接受任何类型输入的模型。关键是,那些预训练模型是用那种数据训练的,因此你必须输入相同类型的数据。唯一的“系统”区别是通道顺序,keras 会自动处理。
    • Resn​​et50 以数据为中心进行了训练,没有进行缩放。因此,您的输入数据必须居中而不是缩放,否则模型将无法正常工作。它专门针对此类数据进行了训练(与您使用的系统无关)
    猜你喜欢
    • 2022-12-10
    • 2018-08-07
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多