如何在Keras中预处理VGG16微调的训练集? [英] How to preprocess training set for VGG16 fine tuning in Keras?

查看:97
本文介绍了如何在Keras中预处理VGG16微调的训练集?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经微调了Keras VGG16模型,但是我不确定训练阶段的预处理.

I have fine tuned the Keras VGG16 model, but I'm unsure about the preprocessing during the training phase.

我创建了一个火车生成器,如下所示:

I create a train generator as follow:

train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
        train_folder,
        target_size=(IMAGE_SIZE, IMAGE_SIZE),
        batch_size=train_batchsize,
        class_mode="categorical"
    )

重新缩放是否足够?还是必须应用其他预处理功能?

Is the rescale enough or I have to apply others preprocessing functions?

当我使用网络对图像进行分类时,我会使用以下代码:

When I use the network to classify an image I use this code:

from keras.models import load_model
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
preds = model.predict(x)

我认为这是正确的预处理程序,我应该在培训之前应用它.

I think this is the correct preprocess and I should apply it before training.

感谢您的帮助.

推荐答案

ImageDataGenerator具有一个preprocessing_function参数,该参数允许您传递在推理过程中使用的相同的preprocess_input函数.此功能将为您进行重新缩放,因此可以省略缩放:

ImageDataGenerator has a preprocessing_function argument which allows you to pass the same preprocess_input function that you are using during inference. This function will do the rescaling for you, so can omit the scaling:

from keras.applications.vgg16 import preprocess_input
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input)

keras_applications中的大多数预训练模型使用相同的

Most of the pretrained models in keras_applications use the same preprocessing function. You can inspect the docstring to see what it does:

def preprocess_input(x, data_format=None, mode='caffe', **kwargs):
    """Preprocesses a tensor or Numpy array encoding a batch of images.
    # Arguments
        x: Input Numpy or symbolic tensor, 3D or 4D.
            The preprocessed data is written over the input data
            if the data types are compatible. To avoid this
            behaviour, `numpy.copy(x)` can be used.
        data_format: Data format of the image tensor/array.
        mode: One of "caffe", "tf" or "torch".
            - caffe: will convert the images from RGB to BGR,
                then will zero-center each color channel with
                respect to the ImageNet dataset,
                without scaling.
            - tf: will scale pixels between -1 and 1,
                sample-wise.
            - torch: will scale pixels between 0 and 1 and then
                will normalize each channel with respect to the
                ImageNet dataset.
    # Returns
        Preprocessed tensor or Numpy array.

这篇关于如何在Keras中预处理VGG16微调的训练集?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆