  
          2 Decoders are then defined (one for each side) with the encoder instances passed in as
          input to the corresponding decoders.
  
          It is important to note that any models and sub-models should not call
          :class:`keras.models.Model` directly, but rather call
          :class:`plugins.train.model._base.KerasModel`. This acts as a wrapper for Keras' Model
          class, but handles some minor differences which need to be handled between Nvidia and AMD
          backends.
  
          The final output of the model should always call :class:`lib.model.nn_blocks.Conv2DOutput`
          so that the correct data type is set for the final activation, to support Mixed Precision
          Training. Failure to do so is likely to lead to issues when Mixed Precision is enabled.
  
          Parameters
 
</s> remove             The output of this function must be a keras model generated from
            :class:`plugins.train.model._base.KerasModel`. See Keras documentation for the correct
            structure, but note that parameter :attr:`name` is a required rather than an optional
            argument in Faceswap. You should assign this to the attribute ``self.name`` that is
            automatically generated from the plugin's filename.
 </s> add             See Keras documentation for the correct structure, but note that parameter :attr:`name`
            is a required rather than an optional argument in Faceswap. You should assign this to
            the attribute ``self.name`` that is automatically generated from the plugin's filename. </s> remove         this is a straight call to the predict function. For PlaidML backends, this attempts
        to optimize the inference batch sizes to reduce the number of kernels that need to be
        compiled.
 </s> add         this is a straight call to the predict function. </s> remove         if get_backend() == "amd":  # Mixed precision not supported on amd
            return model

 </s> add  </s> remove     managers. To enable the code to be more readable, we handle strategies the same way for Nvidia
    and AMD backends. PlaidML does not support strategies, but we need to still create a context
    manager so that we don't need branching logic.
 </s> add     managers. </s> remove     This is an early implementation of this class, and should be expanded out over time
    with relevant `AMD`, `CPU` and `NVIDIA` backend methods.
 </s> add     This is an early implementation of this class, and should be expanded out over time.
  
          2 Decoders are then defined (one for each side) with the encoder instances passed in as
          input to the corresponding decoders.
  






          The final output of the model should always call :class:`lib.model.nn_blocks.Conv2DOutput`
          so that the correct data type is set for the final activation, to support Mixed Precision
          Training. Failure to do so is likely to lead to issues when Mixed Precision is enabled.
  
          Parameters
keep keep keep keep replace replace replace replace replace replace keep keep keep keep keep
 Remove plaidML support (#1325)

* Remove PlaidML reference from readme files

* Remove AMD option from installers

* remove amd requirements and update setup.py

* remove plaidml test from CI workflow

* gpustats: remove plaidml backend

* plaid removals:
  - faceswap.py - python version check
  - setup.cfg - plaidml typing ignore
  - lib.keras_utils - All plaid code
  - lib.launcher.py - All plaidml checks and configuration

* remove tf2.2 specific code from GUI event reader

* lib.model - remove all plaidml implementations

* plugins.extract - remove plaidml code

* plugins.train remove plaidml code

* lib.convert - remove plaidml code

* tools.model: remove plaidml code

* Remove plaidML tests from unit tests

* remove plaidml_utils and docsting cleanups

* Remove plaidML refs from configs

* fix keras imports 
plugins/train/model/original.py