# Copyright 2016 The TensorFlow Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== """Keras layers API.""" import tensorflow.compat.v2 as tf from keras.engine.base_layer import Layer from keras.engine.base_preprocessing_layer import PreprocessingLayer # Generic layers. from keras.engine.input_layer import Input from keras.engine.input_layer import InputLayer from keras.engine.input_spec import InputSpec from keras.layers.activation.elu import ELU from keras.layers.activation.leaky_relu import LeakyReLU from keras.layers.activation.prelu import PReLU # Activations layers. from keras.layers.activation.relu import ReLU from keras.layers.activation.softmax import Softmax from keras.layers.activation.thresholded_relu import ThresholdedReLU from keras.layers.attention.additive_attention import AdditiveAttention from keras.layers.attention.attention import Attention # Attention layers. from keras.layers.attention.multi_head_attention import MultiHeadAttention # Convolution layer aliases. # Convolution layers. from keras.layers.convolutional.conv1d import Conv1D from keras.layers.convolutional.conv1d import Convolution1D from keras.layers.convolutional.conv1d_transpose import Conv1DTranspose from keras.layers.convolutional.conv1d_transpose import Convolution1DTranspose from keras.layers.convolutional.conv2d import Conv2D from keras.layers.convolutional.conv2d import Convolution2D from keras.layers.convolutional.conv2d_transpose import Conv2DTranspose from keras.layers.convolutional.conv2d_transpose import Convolution2DTranspose from keras.layers.convolutional.conv3d import Conv3D from keras.layers.convolutional.conv3d import Convolution3D from keras.layers.convolutional.conv3d_transpose import Conv3DTranspose from keras.layers.convolutional.conv3d_transpose import Convolution3DTranspose from keras.layers.convolutional.depthwise_conv1d import DepthwiseConv1D from keras.layers.convolutional.depthwise_conv2d import DepthwiseConv2D from keras.layers.convolutional.separable_conv1d import SeparableConv1D from keras.layers.convolutional.separable_conv1d import SeparableConvolution1D from keras.layers.convolutional.separable_conv2d import SeparableConv2D from keras.layers.convolutional.separable_conv2d import SeparableConvolution2D # Core layers. from keras.layers.core.activation import Activation from keras.layers.core.dense import Dense from keras.layers.core.einsum_dense import EinsumDense from keras.layers.core.embedding import Embedding from keras.layers.core.identity import Identity from keras.layers.core.lambda_layer import Lambda from keras.layers.core.masking import Masking from keras.layers.core.tf_op_layer import ClassMethod from keras.layers.core.tf_op_layer import InstanceMethod from keras.layers.core.tf_op_layer import InstanceProperty from keras.layers.core.tf_op_layer import SlicingOpLambda from keras.layers.core.tf_op_layer import TFOpLambda # Locally-connected layers. from keras.layers.locally_connected.locally_connected1d import ( LocallyConnected1D, ) from keras.layers.locally_connected.locally_connected2d import ( LocallyConnected2D, ) # Merging functions. # Merging layers. from keras.layers.merging.add import Add from keras.layers.merging.add import add from keras.layers.merging.average import Average from keras.layers.merging.average import average from keras.layers.merging.concatenate import Concatenate from keras.layers.merging.concatenate import concatenate from keras.layers.merging.dot import Dot from keras.layers.merging.dot import dot from keras.layers.merging.maximum import Maximum from keras.layers.merging.maximum import maximum from keras.layers.merging.minimum import Minimum from keras.layers.merging.minimum import minimum from keras.layers.merging.multiply import Multiply from keras.layers.merging.multiply import multiply from keras.layers.merging.subtract import Subtract from keras.layers.merging.subtract import subtract from keras.layers.normalization.batch_normalization import ( SyncBatchNormalization, ) # Normalization layers. from keras.layers.normalization.group_normalization import GroupNormalization from keras.layers.normalization.layer_normalization import LayerNormalization from keras.layers.normalization.unit_normalization import UnitNormalization # Preprocessing layers. from keras.layers.preprocessing.category_encoding import CategoryEncoding from keras.layers.preprocessing.discretization import Discretization from keras.layers.preprocessing.hashed_crossing import HashedCrossing from keras.layers.preprocessing.hashing import Hashing # Image preprocessing layers. from keras.layers.preprocessing.image_preprocessing import CenterCrop from keras.layers.preprocessing.image_preprocessing import RandomBrightness from keras.layers.preprocessing.image_preprocessing import RandomContrast from keras.layers.preprocessing.image_preprocessing import RandomCrop from keras.layers.preprocessing.image_preprocessing import RandomFlip from keras.layers.preprocessing.image_preprocessing import RandomHeight from keras.layers.preprocessing.image_preprocessing import RandomRotation from keras.layers.preprocessing.image_preprocessing import RandomTranslation from keras.layers.preprocessing.image_preprocessing import RandomWidth from keras.layers.preprocessing.image_preprocessing import RandomZoom from keras.layers.preprocessing.image_preprocessing import Rescaling from keras.layers.preprocessing.image_preprocessing import Resizing from keras.layers.preprocessing.integer_lookup import IntegerLookup from keras.layers.preprocessing.normalization import Normalization from keras.layers.preprocessing.string_lookup import StringLookup from keras.layers.preprocessing.text_vectorization import TextVectorization from keras.layers.regularization.activity_regularization import ( ActivityRegularization, ) from keras.layers.regularization.alpha_dropout import AlphaDropout # Regularization layers. from keras.layers.regularization.dropout import Dropout from keras.layers.regularization.gaussian_dropout import GaussianDropout from keras.layers.regularization.gaussian_noise import GaussianNoise from keras.layers.regularization.spatial_dropout1d import SpatialDropout1D from keras.layers.regularization.spatial_dropout2d import SpatialDropout2D from keras.layers.regularization.spatial_dropout3d import SpatialDropout3D # Reshaping layers. from keras.layers.reshaping.cropping1d import Cropping1D from keras.layers.reshaping.cropping2d import Cropping2D from keras.layers.reshaping.cropping3d import Cropping3D from keras.layers.reshaping.flatten import Flatten from keras.layers.reshaping.permute import Permute from keras.layers.reshaping.repeat_vector import RepeatVector from keras.layers.reshaping.reshape import Reshape from keras.layers.reshaping.up_sampling1d import UpSampling1D from keras.layers.reshaping.up_sampling2d import UpSampling2D from keras.layers.reshaping.up_sampling3d import UpSampling3D from keras.layers.reshaping.zero_padding1d import ZeroPadding1D from keras.layers.reshaping.zero_padding2d import ZeroPadding2D from keras.layers.reshaping.zero_padding3d import ZeroPadding3D if tf.__internal__.tf2.enabled(): from keras.layers.normalization.batch_normalization import ( BatchNormalization, ) from keras.layers.normalization.batch_normalization_v1 import ( BatchNormalization as BatchNormalizationV1, ) BatchNormalizationV2 = BatchNormalization else: from keras.layers.normalization.batch_normalization import ( BatchNormalization as BatchNormalizationV2, ) from keras.layers.normalization.batch_normalization_v1 import ( BatchNormalization, ) BatchNormalizationV1 = BatchNormalization # Kernelized layers. from keras.layers.kernelized import RandomFourierFeatures # Pooling layer aliases. # Pooling layers. from keras.layers.pooling.average_pooling1d import AveragePooling1D from keras.layers.pooling.average_pooling1d import AvgPool1D from keras.layers.pooling.average_pooling2d import AveragePooling2D from keras.layers.pooling.average_pooling2d import AvgPool2D from keras.layers.pooling.average_pooling3d import AveragePooling3D from keras.layers.pooling.average_pooling3d import AvgPool3D from keras.layers.pooling.global_average_pooling1d import GlobalAveragePooling1D from keras.layers.pooling.global_average_pooling1d import GlobalAvgPool1D from keras.layers.pooling.global_average_pooling2d import GlobalAveragePooling2D from keras.layers.pooling.global_average_pooling2d import GlobalAvgPool2D from keras.layers.pooling.global_average_pooling3d import GlobalAveragePooling3D from keras.layers.pooling.global_average_pooling3d import GlobalAvgPool3D from keras.layers.pooling.global_max_pooling1d import GlobalMaxPool1D from keras.layers.pooling.global_max_pooling1d import GlobalMaxPooling1D from keras.layers.pooling.global_max_pooling2d import GlobalMaxPool2D from keras.layers.pooling.global_max_pooling2d import GlobalMaxPooling2D from keras.layers.pooling.global_max_pooling3d import GlobalMaxPool3D from keras.layers.pooling.global_max_pooling3d import GlobalMaxPooling3D from keras.layers.pooling.max_pooling1d import MaxPool1D from keras.layers.pooling.max_pooling1d import MaxPooling1D from keras.layers.pooling.max_pooling2d import MaxPool2D from keras.layers.pooling.max_pooling2d import MaxPooling2D from keras.layers.pooling.max_pooling3d import MaxPool3D from keras.layers.pooling.max_pooling3d import MaxPooling3D from keras.layers.rnn.abstract_rnn_cell import AbstractRNNCell # Recurrent layers. from keras.layers.rnn.base_rnn import RNN from keras.layers.rnn.simple_rnn import SimpleRNN from keras.layers.rnn.simple_rnn import SimpleRNNCell from keras.layers.rnn.stacked_rnn_cells import StackedRNNCells if tf.__internal__.tf2.enabled(): from keras.layers.rnn.gru import GRU from keras.layers.rnn.gru import GRUCell from keras.layers.rnn.gru_v1 import GRU as GRUV1 from keras.layers.rnn.gru_v1 import GRUCell as GRUCellV1 from keras.layers.rnn.lstm import LSTM from keras.layers.rnn.lstm import LSTMCell from keras.layers.rnn.lstm_v1 import LSTM as LSTMV1 from keras.layers.rnn.lstm_v1 import LSTMCell as LSTMCellV1 GRUV2 = GRU GRUCellV2 = GRUCell LSTMV2 = LSTM LSTMCellV2 = LSTMCell else: from keras.layers.rnn.gru import GRU as GRUV2 from keras.layers.rnn.gru import GRUCell as GRUCellV2 from keras.layers.rnn.gru_v1 import GRU from keras.layers.rnn.gru_v1 import GRUCell from keras.layers.rnn.lstm import LSTM as LSTMV2 from keras.layers.rnn.lstm import LSTMCell as LSTMCellV2 from keras.layers.rnn.lstm_v1 import LSTM from keras.layers.rnn.lstm_v1 import LSTMCell GRUV1 = GRU GRUCellV1 = GRUCell LSTMV1 = LSTM LSTMCellV1 = LSTMCell # Serialization functions. from keras.layers import serialization # Wrapper functions. from keras.layers.rnn.base_wrapper import Wrapper from keras.layers.rnn.bidirectional import Bidirectional # RNN Cell wrappers. from keras.layers.rnn.cell_wrappers import DeviceWrapper from keras.layers.rnn.cell_wrappers import DropoutWrapper from keras.layers.rnn.cell_wrappers import ResidualWrapper # Convolutional-recurrent layers. from keras.layers.rnn.conv_lstm1d import ConvLSTM1D from keras.layers.rnn.conv_lstm2d import ConvLSTM2D from keras.layers.rnn.conv_lstm3d import ConvLSTM3D from keras.layers.rnn.cudnn_gru import CuDNNGRU # cuDNN recurrent layers. from keras.layers.rnn.cudnn_lstm import CuDNNLSTM from keras.layers.rnn.time_distributed import TimeDistributed from keras.layers.serialization import deserialize from keras.layers.serialization import deserialize_from_json from keras.layers.serialization import get_builtin_layer from keras.layers.serialization import serialize class VersionAwareLayers: """Utility to be used internally to access layers in a V1/V2-aware fashion. When using layers within the Keras codebase, under the constraint that e.g. `layers.BatchNormalization` should be the `BatchNormalization` version corresponding to the current runtime (TF1 or TF2), do not simply access `layers.BatchNormalization` since it would ignore e.g. an early `compat.v2.disable_v2_behavior()` call. Instead, use an instance of `VersionAwareLayers` (which you can use just like the `layers` module). """ def __getattr__(self, name): serialization.populate_deserializable_objects() if name in serialization.LOCAL.ALL_OBJECTS: return serialization.LOCAL.ALL_OBJECTS[name] return super().__getattr__(name)