Image input layer


An image input layer inputs 2-D images to a network and applies data normalization.

For 3-D image input, use image3dInputLayer.



layer = imageInputLayer(inputSize)
layer = imageInputLayer(inputSize,Name,Value)


layer = imageInputLayer(inputSize) returns an image input layer and specifies the InputSize property.


layer = imageInputLayer(inputSize,Name,Value) sets the optional properties using name-value pairs. You can specify multiple name-value pairs. Enclose each property name in single quotes.


expand all

Image Input

Size of the input data, specified as a row vector of integers [h w c], where h, w, and c correspond to the height, width, and number of channels respectively.

  • For grayscale images, specify a vector with c equal to 1.

  • For RGB images, specify a vector with c equal to 3.

  • For multispectral or hyperspectral images, specify a vector with c equal to the number of channels.

For 3-D image or volume input, use image3dInputLayer.

Example: [224 224 3]

Data transformation to apply every time data is forward propagated through the input layer, specified as one of the following.

  • 'zerocenter' — Subtract the average image specified by the AverageImage property. The trainNetwork function automatically computes the average image at training time.

  • 'none' — Do not transform the input data.

Average image used for zero center normalization, specified as a h-by-w-by-c array, a 1-by-1-by-c array of means per channel, or [], where h, w, and c correspond to the height, width, and the number of channels of the average image respectively.

You can set this property when creating networks without training (for example, when assembling networks using assembleNetwork). Otherwise, the trainNetwork function recomputes the average image at training time. When specifying the average image, the Normalization property must be 'zerocenter'.

Data Types: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64


The DataAugmentation property is not recommended. To preprocess images with cropping, reflection, and other geometric transformations, use augmentedImageDatastore instead.

Data augmentation transforms to use during training, specified as one of the following.

  • 'none' — No data augmentation

  • 'randcrop' — Take a random crop from the training image. The random crop has the same size as the input size.

  • 'randfliplr' — Randomly flip the input images horizontally with a 50% chance.

  • Cell array of 'randcrop' and 'randfliplr'. The software applies the augmentation in the order specified in the cell array.

Augmentation of image data is another way of reducing overfitting [1], [2].

Data Types: char | cell


Layer name, specified as a character vector or a string scalar. To include a layer in a layer graph, you must specify a nonempty unique layer name. If you train a series network with the layer and Name is set to '', then the software automatically assigns a name to the layer at training time.

Data Types: char | string

Number of inputs of the layer. The layer has no inputs.

Data Types: double

Input names of the layer. The layer has no inputs.

Data Types: cell

Number of outputs of the layer. This layer has a single output only.

Data Types: double

Output names of the layer. This layer has a single output only.

Data Types: cell


collapse all

Create an image input layer for 28-by-28 color images with name 'input'. By default, the layer performs data normalization by subtracting the mean image of the training set from every input image.

inputlayer = imageInputLayer([28 28 3],'Name','input')
inputlayer = 
  ImageInputLayer with properties:

                Name: 'input'
           InputSize: [28 28 3]

    DataAugmentation: 'none'
       Normalization: 'zerocenter'
        AverageImage: []

Include an image input layer in a Layer array.

layers = [ ...
    imageInputLayer([28 28 1])
layers = 
  7x1 Layer array with layers:

     1   ''   Image Input             28x28x1 images with 'zerocenter' normalization
     2   ''   Convolution             20 5x5 convolutions with stride [1  1] and padding [0  0  0  0]
     3   ''   ReLU                    ReLU
     4   ''   Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     5   ''   Fully Connected         10 fully connected layer
     6   ''   Softmax                 softmax
     7   ''   Classification Output   crossentropyex


[1] Krizhevsky, A., I. Sutskever, and G. E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks". Advances in Neural Information Processing Systems. Vol 25, 2012.

[2] Cireşan, D., U. Meier, J. Schmidhuber. "Multi-column Deep Neural Networks for Image Classification". IEEE Conference on Computer Vision and Pattern Recognition, 2012.

Introduced in R2016a