Absolute value layer in CNN

Question:

I’m new to CNN. I’m trying to build a CNN, and I have the following steps:

model.add(Conv2D(8, (5, 5), input_shape=(256, 256, 1), padding='same', use_bias=False)) # use_bias=False
model.add(BatchNormalization())
model.add(Activation(tanh))
model.add(AveragePooling2D (pool_size= (5,5), strides=2))

I’m trying to add absolute value layer after the first step after applying 2DConv.. I’m read the answer in the link Absolute value layer in CNN trying the following code:

rom keras.models import model_from_json
model.add(Conv2D(8, (5, 5), input_shape=(256, 256, 1), padding='same', use_bias=False)) # use_bias=False
    outputlayer1 = model.layers[0].output
    outputlayer = abs(outputlayer1)
    model.layers[0].output = outputlayer
    new_model = model_from_json(model.to_json())
    new_model.summary()

I’m getting the error:

AttributeError: can't set attribute

Please, how I can applying the absolute value on the outputs of 2Dconv layer.
With my thanks

Asked By: Saeed Hassiny

||

Answers:

One way to access the output of layer number 2, applied to an image would be :

from keras.models import Model 
model_part = Model(input = model.input,
               output = model.layers[1].output)
vals = model.predict(image)
print(vals)

Either way, you should check if an absolute value layer is useful in your case, or if it would already be implicit in one of your following layers.

Answered By: Ludovic H

You can use lambda layer for that purpose.

tf.keras.layers.Lambda(lambda x: tf.abs(x))

Answered By: Rehal