I have a specific sequential model for preprocessing data as follows:
data_transformation = tf.keras.Sequential([layers.experimental.preprocessing.RandomContrast(factor=(0.7,0.9)),layers.GaussianNoise(stddev=tf.random.uniform(shape=(),minval=0, maxval=1)), layers.experimental.preprocessing.RandomRotation(factor=0.1, fill_mode='reflect', interpolation='bilinear', seed=None, name=None, fill_value=0.0), layers.experimental.preprocessing.RandomZoom(height_factor=(0.1,0.2), width_factor=(0.1,0.2), fill_mode='reflect', interpolation='bilinear', seed=None, name=None, fill_value=0.0),])
However, I would like to add my own preprocessing layer, that is defined by the Python function below:
import tensorflow as tf
import random
def my_random_contrast(image_to_be_transformed, contrast_factor):
#build the contrast factor
selected_contrast_factor=random.uniform(1-contrast_factor, 1+contrast_factor)
selected_contrast_factor_c1=selected_contrast_factor
selected_contrast_factor_c2=selected_contrast_factor-0.01
selected_contrast_factor_c3=selected_contrast_factor-0.02
image_to_be_transformed=image_to_be_transformed.numpy()
image_to_be_transformed[0,:,:]=((image_to_be_transformed[0,:,:]-tf.reduce_mean(image_to_be_transformed[0,:,:]))*selected_contrast_factor_c1)+tf.reduce_mean(image_to_be_transformed[0,:,:])
image_to_be_transformed[1,:,:]=((image_to_be_transformed[1,:,:]-tf.reduce_mean(image_to_be_transformed[1,:,:]))*selected_contrast_factor_c2)+tf.reduce_mean(image_to_be_transformed[1,:,:])
image_to_be_transformed[2,:,:]=((image_to_be_transformed[2,:,:]-tf.reduce_mean(image_to_be_transformed[2,:,:]))*selected_contrast_factor_c3)+tf.reduce_mean(image_to_be_transformed[2,:,:])
image_to_be_transformed=tf.convert_to_tensor(image_to_be_transformed)
return image_to_be_transformed
x=tf.random.uniform(shape=[3,224,224], minval=0, maxval=1, dtype=tf.float32)
y=my_random_contrast(x, 0.5)
How can I do that with TensorFlow? as a new preprocessing layer that will receive inputs and outputs from other layers, should I have to guarantee that the input and outputs are of a given type?
