Home > Software engineering >  Custom layer using tensorflow
Custom layer using tensorflow

Time:11-01

I am trying to make customized layer which reduces channels by reduce_sum(axis=-1)

For example when input shape is (32,32,128)

I want to change the input shape from (32,32,128) to (None,32,32,128) and

And if the channels have index which will be like [0],[1],[2],[3]………[126],[127] And my customized layer want to do is adding 2or 3 or 4…N channels

Lets say if i want to add only 2 channels Whoch will be [0] [1],[1] [2]….[126] [127] And the output shape will be (32,32,64)

also (None,32,32,64)

For more details lets say i want to add 3 channels which will be [0] [1] [2],[3] [4] [4]… … [123] [124] [125],[126] [127] And the output shape will be (32,32,44)

Here too (None,32,32,44)

So is it possible to make it?

Is there index in channels? If so it would be kinda easy to make it I think…

CodePudding user response:

x = tf.random.normal(shape=(32,32,128))
    sum_dim = 2
    x = tf.reduce_sum(tf.reshape(x, (x.shape[0], x.shape[1], -1, sum_dim)), -1)
    #[32, 32, 64]

If you want to write the keras layer:

class ChannelSum(keras.layers.Layer):
    def __init__(self, sum_dim=2):
        super(ChannelSum, self).__init__()
        self.sum_dim = sum_dim
    def call(self, x ):
        return tf.reduce_sum(tf.reshape(x, (-1, x.shape[1], x.shape[2], x.shape[3]//self.sum_dim, self.sum_dim)), -1)
  • Related