Если вы хотите иметь собственный уровень предварительной обработки, на самом деле вам не нужно использовать PreprocessingLayer
. Вы можете просто создать подкласс Layer
Возьмите простейший слой предварительной обработки Rescaling в качестве примера, он находится в пространстве имен tf.keras.layers.experimental.preprocessing.Rescaling
. Однако, если вы проверите фактическую реализацию, это просто подкласс Layer
класс Ссылка на исходный код здесь , но имеет @ keras_export ('keras.layers.experimental.preprocessing.Rescaling')
@keras_export('keras.layers.experimental.preprocessing.Rescaling')
class Rescaling(Layer):
"""Multiply inputs by `scale` and adds `offset`.
For instance:
1. To rescale an input in the `[0, 255]` range
to be in the `[0, 1]` range, you would pass `scale=1./255`.
2. To rescale an input in the `[0, 255]` range to be in the `[-1, 1]` range,
you would pass `scale=1./127.5, offset=-1`.
The rescaling is applied both during training and inference.
Input shape:
Arbitrary.
Output shape:
Same as input.
Arguments:
scale: Float, the scale to apply to the inputs.
offset: Float, the offset to apply to the inputs.
name: A string, the name of the layer.
"""
def __init__(self, scale, offset=0., name=None, **kwargs):
self.scale = scale
self.offset = offset
super(Rescaling, self).__init__(name=name, **kwargs)
def call(self, inputs):
dtype = self._compute_dtype
scale = math_ops.cast(self.scale, dtype)
offset = math_ops.cast(self.offset, dtype)
return math_ops.cast(inputs, dtype) * scale + offset
def compute_output_shape(self, input_shape):
return input_shape
def get_config(self):
config = {
'scale': self.scale,
'offset': self.offset,
}
base_config = super(Rescaling, self).get_config()
return dict(list(base_config.items()) + list(config.items()))
Таким образом, это доказывает, что предварительная обработка Rescaling
- это просто еще один нормальный слой.
Основная часть - это функция def call(self, inputs)
. Вы можете создать любой сложный logi c, чтобы предварительно обработать ваш inputs
, а затем вернуть.
Более простую документацию о настраиваемом слое можно найти здесь
В двух словах , вы можете выполнять предварительную обработку по слоям, либо с помощью Lambda для простой операции, либо путем создания подкласса Layer для достижения вашей цели.