0

I'm about to use Keras' ImageDataGenerator class (in keras/preprocessing/image.py) for training a neural net. I will have one generator for my training data, and another for my testing data. However, some of the arguments seem to apply to preprocessing of images, while others attempt to augment the dataset.

I want both my training and test data to be preprocessed in the same way, but do not believe I want my testing set to be 'augmented' by various image transforms. So, if I am correct in believing this, are the following arguments for preprocessing and to be shared by both datasets:

    featurewise_center: Boolean.
        Set input mean to 0 over the dataset, feature-wise.
    samplewise_center: Boolean. Set each sample mean to 0.
    featurewise_std_normalization: Boolean.
        Divide inputs by std of the dataset, feature-wise.
    samplewise_std_normalization: Boolean. Divide each input by its std.
    zca_epsilon: epsilon for ZCA whitening. Default is 1e-6.
    zca_whitening: Boolean. Apply ZCA whitening.
    fill_mode: One of {"constant", "nearest", "reflect" or "wrap"}.
        Default is 'nearest'.
        Points outside the boundaries of the input are filled
        according to the given mode:
        - 'constant': kkkkkkkk|abcd|kkkkkkkk (cval=k)
        - 'nearest':  aaaaaaaa|abcd|dddddddd
        - 'reflect':  abcddcba|abcd|dcbaabcd
        - 'wrap':  abcdabcd|abcd|abcdabcd
    cval: Float or Int.
        Value used for points outside the boundaries
        when `fill_mode = "constant"`.
    rescale: rescaling factor. Defaults to None.
        If None or 0, no rescaling is applied,
        otherwise we multiply the data by the value provided
        (after applying all other transformations).
    preprocessing_function: function that will be implied on each input.
        The function will run after the image is resized and augmented.
        The function should take one argument:
        one image (Numpy tensor with rank 3),
        and should output a Numpy tensor with the same shape.
    data_format: Image data format,
        either "channels_first" or "channels_last".
        "channels_last" mode means that the images should have shape
        `(samples, height, width, channels)`,
        "channels_first" mode means that the images should have shape
        `(samples, channels, height, width)`.
        It defaults to the `image_data_format` value found in your
        Keras config file at `~/.keras/keras.json`.
        If you never set it, then it will be "channels_last".
    dtype: Dtype to use for the generated arrays.

Whereas these arguments are for data augmenting and should only be applied to the training set:

    rotation_range: Int. Degree range for random rotations.
    width_shift_range: Float, 1-D array-like or int
        - float: fraction of total width, if < 1, or pixels if >= 1.
        - 1-D array-like: random elements from the array.
        - int: integer number of pixels from interval
            `(-width_shift_range, +width_shift_range)`
        - With `width_shift_range=2` possible values
            are integers `[-1, 0, +1]`,
            same as with `width_shift_range=[-1, 0, +1]`,
            while with `width_shift_range=1.0` possible values are floats
            in the interval [-1.0, +1.0).
    height_shift_range: Float, 1-D array-like or int
        - float: fraction of total height, if < 1, or pixels if >= 1.
        - 1-D array-like: random elements from the array.
        - int: integer number of pixels from interval
            `(-height_shift_range, +height_shift_range)`
        - With `height_shift_range=2` possible values
            are integers `[-1, 0, +1]`,
            same as with `height_shift_range=[-1, 0, +1]`,
            while with `height_shift_range=1.0` possible values are floats
            in the interval [-1.0, +1.0).
    brightness_range: Tuple or list of two floats. Range for picking
        a brightness shift value from.
    shear_range: Float. Shear Intensity
        (Shear angle in counter-clockwise direction in degrees)
    zoom_range: Float or [lower, upper]. Range for random zoom.
        If a float, `[lower, upper] = [1-zoom_range, 1+zoom_range]`.
    channel_shift_range: Float. Range for random channel shifts.
    horizontal_flip: Boolean. Randomly flip inputs horizontally.
    vertical_flip: Boolean. Randomly flip inputs vertically.

Also, I'm not clear on whether data in the validation set (as carved out by the ImageDataGenerator class is (or should be) subject to the transforms that provide augmentation.

user1245262
  • 6,968
  • 8
  • 50
  • 77
  • what you said about training and testing set (not augmenting test set) is fine. what is your question btw ? – venkata krishnan Nov 13 '19 at 07:11
  • @venkatakrishnan - 1. Have I correctly divided the input parameters of ImageDataGenerator into those which preprocess the image and those which augment the dataset? (I think so, but want to avoid a silly mistake before I make it). 2. Am I correct in caring about this? (I believe I am, and if I read your comment correctly, you agree) – user1245262 Nov 13 '19 at 20:30

0 Answers0