什么是在Keras中预处理数据的正确方法,同时在keras.applications中为我们自己的数据微调预先训练的模型?
Keras提供以下 preprocess_input
功能
keras.applications.imagenet_utils.preprocess_input
keras.applications.inception_v3.preprocess_input
keras.applications.xception.preprocess_input
keras.applications.inception_resnet_v2.preprocess_input
在内部看来,似乎对于inception_v3,xception和inception_resnet_v2,它使用 mode='tf'
调用keras.applications.imagenet_utils.preprocess_input . 而对于其他模型,它设置 mode='caffe'
,每个模型执行不同的转换 .
在关于从Francois chollet转移学习的博客文章中 - https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html - 通过255的除法将其归一化为 [0, 1]
. 不应该使用Keras中的preprocess_input函数吗?
还不清楚输入图像应该是RGB还是BGR?是否有任何关于此的一致性,还是特定于使用的预训练模型?
1 回答
始终在相应的模型级模块中使用
preprocess_input
功能 . 也就是说,keras.applications.inception_v3.preprocess_input
用于InceptionV3
,keras.applications.resnet50.preprocess_input
用于ResNet50
.mode
参数指定训练原始模型时使用的预处理方法 .mode='tf'
表示预训练的权重是从TF转换的,其中作者用[-1, 1]
输入范围训练模型 .mode='caffe'
和mode='torch'
也是如此 .applications.*.preprocess_input
的输入始终为RGB . 如果模型需要BGR输入,则通道将在preprocess_input
内置换 .您提到的博客文章是在
keras.applications
模块推出之前发布的 . 我不建议使用它作为keras.applications
转移学习的参考 . 也许最好尝试docs中的示例 .