繁体   English   中英

如何在 TensorFlow 层内调整对比度?

[英]How do I adjust contrast within TensorFlow layer?

我想创建一个始终应用对比度的 TensorFlow/Keras 层,无论是在训练时间还是测试时间。

我使用了 TensorFlow 对比度调整方法tf.image.adjust_contrast ,但是当我将它放在我正在制作的图层的call方法中并尝试训练时出现错误:

LookupError: gradient registry has no entry for: AdjustContrastv2

这是我当前的图层代码:

class Contrast(keras.layers.Layer):
    def __init__(self, contrast_level=2, **kwargs):
        super(Contrast, self).__init__(**kwargs)
        self.supports_masking = True
        self.contrast_level = contrast_level

    def call(self, inputs, training=None):
        return tf.image.adjust_contrast(inputs, self.contrast_level)

    def get_config(self):
        config = {'stddev': self.stddev}
        base_config = super(Contrast, self).get_config()
        return dict(list(base_config.items()) + list(config.items()))

    def compute_output_shape(self, input_shape):
        return input_shape

我认为为了提高效率,我应该尝试使用实现对比度的 TensorFlow 方法,但这不是解决问题的方法吗?

错误消息的字面意思是,tensorflow 不知道操作的梯度。 您必须自己定义adjust_contrast

示例代码:

class Contrast(tf.keras.layers.Layer):
    def __init__(self, contrast_level=2.0, **kwargs):
        self.contrast_level = contrast_level
        super().__init__(**kwargs)
        self.supports_masking = True

    def call(self, inputs, training=None):
      channel_mean = tf.math.reduce_mean(inputs, [1, 2], keepdims=True)
      return (inputs - channel_mean) * self.contrast_level + channel_mean

contrast_layer=Contrast()

random_images=[np.random.uniform(1,2,size=(64,224,224,3)).astype(np.float32) for i in range(3)] 

print(np.allclose(tf.image.adjust_contrast(random_images[0],2),contrast_layer(random_images[0]),atol=0,rtol=1e-4))#True
print(np.allclose(tf.image.adjust_contrast(random_images[1],2),contrast_layer(random_images[1]),atol=0,rtol=1e-4))#True
print(np.allclose(tf.image.adjust_contrast(random_images[2],2),contrast_layer(random_images[2]),atol=0,rtol=1e-4))#True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM