a preprocessing layer which resizes images this layer resizes an image input to a target height and width the input should be a 4d batched or 3d unbatched tensor in channelslast format input pixel values can be of any range e g 0 1 or 0 255 input shape 3d unbatched or 4d batched tensor with shape height width channels in channelslast format or channels height width in channelsfirst format output shape 3d unbatched or 4d batched tensor with shape targetheight targetwidth channels or channels targetheight targetwidth in channelsfirst format note this layer is safe to use inside a tf data pipeline independently of which backend you re using args height integer the height of the output shape width integer the width of the output shape interpolation string the interpolation method supports bilinear nearest bicubic lanczos3 lanczos5 defaults to bilinear croptoaspectratio if true resize the images without aspect ratio distortion when the original aspect ratio differs from the target aspect ratio the output image will be cropped so as to return the largest possible window in the image of size height width that matches the target aspect ratio by default croptoaspectratiofalse aspect ratio may not be preserved dataformat string either channelslast or channelsfirst the ordering of the dimensions in the inputs channelslast corresponds to inputs with shape batch height width channels while channelsfirst corresponds to inputs with shape batch channels height width it defaults to the imagedataformat value found in your keras config file at keraskeras json if you never set it then it will be channelslast kwargs base layer keyword arguments such as name and dtype a preprocessing layer which resizes images this layer resizes an image input to a target height and width the input should be a 4d batched or 3d unbatched tensor in channels_last format input pixel values can be of any range e g 0 1 or 0 255 input shape 3d unbatched or 4d batched tensor with shape height width channels in channels_last format or channels height width in channels_first format output shape 3d unbatched or 4d batched tensor with shape target_height target_width channels or channels target_height target_width in channels_first format note this layer is safe to use inside a tf data pipeline independently of which backend you re using args height integer the height of the output shape width integer the width of the output shape interpolation string the interpolation method supports bilinear nearest bicubic lanczos3 lanczos5 defaults to bilinear crop_to_aspect_ratio if true resize the images without aspect ratio distortion when the original aspect ratio differs from the target aspect ratio the output image will be cropped so as to return the largest possible window in the image of size height width that matches the target aspect ratio by default crop_to_aspect_ratio false aspect ratio may not be preserved data_format string either channels_last or channels_first the ordering of the dimensions in the inputs channels_last corresponds to inputs with shape batch height width channels while channels_first corresponds to inputs with shape batch 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 kwargs base layer keyword arguments such as name and dtype
from keras import backend
from keras.api_export import keras_export
from keras.layers.preprocessing.tf_data_layer import TFDataLayer
from keras.utils import image_utils


@keras_export("keras.layers.Resizing")
class Resizing(TFDataLayer):
    

    def __init__(
        self,
        height,
        width,
        interpolation="bilinear",
        crop_to_aspect_ratio=False,
        data_format=None,
        **kwargs,
    ):
        super().__init__(**kwargs)
        self.height = height
        self.width = width
        self.interpolation = interpolation
        self.data_format = backend.standardize_data_format(data_format)
        self.crop_to_aspect_ratio = crop_to_aspect_ratio

    def call(self, inputs):
        size = (self.height, self.width)
        if self.crop_to_aspect_ratio:
            outputs = image_utils.smart_resize(
                inputs,
                size=size,
                interpolation=self.interpolation,
                data_format=self.data_format,
                backend_module=self.backend,
            )
        else:
            outputs = self.backend.image.resize(
                inputs,
                size=size,
                interpolation=self.interpolation,
                data_format=self.data_format,
            )
        return outputs

    def compute_output_shape(self, input_shape):
        input_shape = list(input_shape)
        if len(input_shape) == 4:
            if self.data_format == "channels_last":
                input_shape[1] = self.height
                input_shape[2] = self.width
            else:
                input_shape[2] = self.height
                input_shape[3] = self.width
        else:
            if self.data_format == "channels_last":
                input_shape[0] = self.height
                input_shape[1] = self.width
            else:
                input_shape[1] = self.height
                input_shape[2] = self.width
        return tuple(input_shape)

    def get_config(self):
        base_config = super().get_config()
        config = {
            "height": self.height,
            "width": self.width,
            "interpolation": self.interpolation,
            "crop_to_aspect_ratio": self.crop_to_aspect_ratio,
            "data_format": self.data_format,
        }
        return {**base_config, **config}