我对Keras中的输入预处理有疑问。
如果查看预处理源代码
https://github.com/keras-team/keras/blob/master/keras/applications/imagenet_utils.py#L149
默认的预处理模式似乎是Caffe。他们的代码片段也直接使用它
https://github.com/fchollet/deep-learning-models
我的问题是,为什么Keras没有检查Keras.backend()以找到正确的模式并进行适当的预处理?这可能是个错误吗?
我的后端是张量流,所以我想知道如果他们的示例中提供的代码直接运行是个好主意。
由于
答案 0 :(得分:1)
每个模型都有自己的预处理。
有些人会从您展示的代码中进行预处理(使用mode='caffe'
明确声明的代码)。有些模型声明自己的预处理。始终从与您尝试实例的模型相同的模块中导入预处理功能,因此您可以导入正确的功能。
该模式适合模型的构建方式。如果使用caffe
模式构建模型,那么它仅适用于遵循该规范的输入。
同样适用于所有其他模式。
Tensorflow或Theano?
这并不重要。 Keras确实正确处理这些格式
正如您在该源代码中看到的那样,keras具有K.image_data_format()
,它取自您的默认配置(您在channels_last
文件中找到了默认配置,通常为keras.json
) 。
无论您是使用Theano还是Tensorflow,Keras都能正确处理格式。我建议,除非你有理由或明确的偏好,否则就像channels_last
一样离开配置。这使得更容易将卷积层与其他层和损失函数集成。 keras中的所有内容都倾向于在最后一个轴上工作,因此,将通道保留在最后位置以避免额外的工作。