This layer will apply random rotations to each image, filling empty space
according to fill_mode.
By default, random rotations are only applied during training.
At inference time, the layer does nothing. If you need to apply random
rotations at inference time, pass training=True when calling the layer.
Input pixel values can be of any range (e.g. [0., 1.) or [0, 255]) and
of integer or floating point dtype.
By default, the layer will output floats.
Input shape
3D
unbatched) or 4D (batched) tensor with shape
(..., height, width, channels), in "channels_last" format
Output shape
3D
unbatched) or 4D (batched) tensor with shape
(..., height, width, channels), in "channels_last" format
Args
factor
a float represented as fraction of 2 Pi, or a tuple of size 2
representing lower and upper bound for rotating clockwise and
counter-clockwise. A positive values means rotating
counter clock-wise,
while a negative value means clock-wise.
When represented as a single
float, this value is used for both the upper and lower bound.
For instance, factor=(-0.2, 0.3)
results in an output rotation by a random
amount in the range [-20% * 2pi, 30% * 2pi].
factor=0.2 results in an
output rotating by a random amount
in the range [-20% * 2pi, 20% * 2pi].
fill_mode
Points outside the boundaries of the input are filled
according to the given mode
(one of {"constant", "reflect", "wrap", "nearest"}).
reflect: (d c b a | a b c d | d c b a)
The input is extended by reflecting about
the edge of the last pixel.
constant: (k k k k | a b c d | k k k k)
The input is extended by
filling all values beyond the edge with
the same constant value k = 0.
wrap: (a b c d | a b c d | a b c d) The input is extended by
wrapping around to the opposite edge.
nearest: (a a a a | a b c d | d d d d)
The input is extended by the nearest pixel.
This method is the reverse of get_config,
capable of instantiating the same layer from the config
dictionary. It does not handle layer connectivity
(handled by Network), nor weights (handled by set_weights).
Args
config
A Python dictionary, typically the
output of get_config.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-06-07 UTC."],[],[],null,["# tf.keras.layers.RandomRotation\n\n\u003cbr /\u003e\n\n|------------------------------------------------------------------------------------------------------------------------------------|\n| [View source on GitHub](https://github.com/keras-team/keras/tree/v3.3.3/keras/src/layers/preprocessing/random_rotation.py#L9-L254) |\n\nA preprocessing layer which randomly rotates images during training.\n\nInherits From: [`Layer`](../../../tf/keras/Layer), [`Operation`](../../../tf/keras/Operation) \n\n tf.keras.layers.RandomRotation(\n factor,\n fill_mode='reflect',\n interpolation='bilinear',\n seed=None,\n fill_value=0.0,\n value_range=(0, 255),\n data_format=None,\n **kwargs\n )\n\n### Used in the notebooks\n\n| Used in the guide | Used in the tutorials |\n|----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| - [Working with preprocessing layers](https://www.tensorflow.org/guide/keras/preprocessing_layers) | - [Image classification](https://www.tensorflow.org/tutorials/images/classification) - [Data augmentation](https://www.tensorflow.org/tutorials/images/data_augmentation) - [Transfer learning and fine-tuning](https://www.tensorflow.org/tutorials/images/transfer_learning) - [Retraining an Image Classifier](https://www.tensorflow.org/hub/tutorials/tf2_image_retraining) |\n\nThis layer will apply random rotations to each image, filling empty space\naccording to `fill_mode`.\n\nBy default, random rotations are only applied during training.\nAt inference time, the layer does nothing. If you need to apply random\nrotations at inference time, pass `training=True` when calling the layer.\n\nInput pixel values can be of any range (e.g. `[0., 1.)` or `[0, 255]`) and\nof integer or floating point dtype.\nBy default, the layer will output floats.\n| **Note:** This layer is safe to use inside a [`tf.data`](../../../tf/data) pipeline (independently of which backend you're using).\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Input shape ----------- ||\n|------|---------------------------------------------------------------------------------------------------------------------|\n| `3D` | `unbatched) or 4D (batched) tensor with shape` \u003cbr /\u003e `(..., height, width, channels)`, in `\"channels_last\"` format |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Output shape ------------ ||\n|------|---------------------------------------------------------------------------------------------------------------------|\n| `3D` | `unbatched) or 4D (batched) tensor with shape` \u003cbr /\u003e `(..., height, width, channels)`, in `\"channels_last\"` format |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Args ---- ||\n|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `factor` | a float represented as fraction of 2 Pi, or a tuple of size 2 representing lower and upper bound for rotating clockwise and counter-clockwise. A positive values means rotating counter clock-wise, while a negative value means clock-wise. When represented as a single float, this value is used for both the upper and lower bound. For instance, `factor=(-0.2, 0.3)` results in an output rotation by a random amount in the range `[-20% * 2pi, 30% * 2pi]`. `factor=0.2` results in an output rotating by a random amount in the range `[-20% * 2pi, 20% * 2pi]`. |\n| `fill_mode` | Points outside the boundaries of the input are filled according to the given mode (one of `{\"constant\", \"reflect\", \"wrap\", \"nearest\"}`). \u003cbr /\u003e - *reflect* : `(d c b a | a b c d | d c b a)` The input is extended by reflecting about the edge of the last pixel. - *constant* : `(k k k k | a b c d | k k k k)` The input is extended by filling all values beyond the edge with the same constant value k = 0. - *wrap* : `(a b c d | a b c d | a b c d)` The input is extended by wrapping around to the opposite edge. - *nearest* : `(a a a a | a b c d | d d d d)` The input is extended by the nearest pixel. |\n| `interpolation` | Interpolation mode. Supported values: `\"nearest\"`, `\"bilinear\"`. |\n| `seed` | Integer. Used to create a random seed. |\n| `fill_value` | a float represents the value to be filled outside the boundaries when `fill_mode=\"constant\"`. |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Attributes ---------- ||\n|----------|------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `input` | Retrieves the input tensor(s) of a symbolic operation. \u003cbr /\u003e Only returns the tensor(s) corresponding to the *first time* the operation was called. |\n| `output` | Retrieves the output tensor(s) of a layer. \u003cbr /\u003e Only returns the tensor(s) corresponding to the *first time* the operation was called. |\n\n\u003cbr /\u003e\n\nMethods\n-------\n\n### `from_config`\n\n[View source](https://github.com/keras-team/keras/tree/v3.3.3/keras/src/ops/operation.py#L191-L213) \n\n @classmethod\n from_config(\n config\n )\n\nCreates a layer from its config.\n\nThis method is the reverse of `get_config`,\ncapable of instantiating the same layer from the config\ndictionary. It does not handle layer connectivity\n(handled by Network), nor weights (handled by `set_weights`).\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Args ||\n|----------|----------------------------------------------------------|\n| `config` | A Python dictionary, typically the output of get_config. |\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n| Returns ||\n|---|---|\n| A layer instance. ||\n\n\u003cbr /\u003e\n\n### `symbolic_call`\n\n[View source](https://github.com/keras-team/keras/tree/v3.3.3/keras/src/ops/operation.py#L58-L70) \n\n symbolic_call(\n *args, **kwargs\n )"]]