如何在TF 2.2中创建自定义预处理层

我想使用tf.keras.layers.experimental.preprocessing.PreprocessingLayer层来创建一个自定义的预处理层。

在这个自定义层中,我希望在输入层之后对我的图像进行归一化处理,使用tf.cast(img, tf.float32) / 255.

我试图找到一些代码或示例,展示如何创建这个预处理层,但没有找到。

请问,有人可以提供一个完整的示例,展示如何创建和使用PreprocessingLayer层吗?


回答:

如果你想拥有一个自定义的预处理层,实际上你不需要使用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):  """通过`scale`乘以输入并加上`offset`。  例如:  1. 要将[0, 255]范围内的输入重新缩放到[0, 1]范围内,你可以传递`scale=1./255`。  2. 要将[0, 255]范围内的输入重新缩放到[-1, 1]范围内,你可以传递`scale=1./127.5, offset=-1`。  重新缩放在训练和推理过程中都会应用。  输入形状:    任意。  输出形状:    与输入相同。  参数:    scale: 浮点数,应用于输入的缩放比例。    offset: 浮点数,应用于输入的偏移量。    name: 字符串,层的名称。  """  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)函数。你可以创建任何复杂的逻辑来预处理你的inputs然后返回。

关于自定义层的更简单文档可以在这里找到

简而言之,你可以通过层来进行预处理,无论是通过Lambda进行简单操作,还是通过继承Layer来实现你的目标。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注