Home > Net >  Keras add normalise layer so sum of values is 1
Keras add normalise layer so sum of values is 1

Time:03-31

I want to be able to add a layer to my network that takes the input from previous layer and outputs a probability distribution where all of the values are positive and sum to 1. So any negative values are set to 0, then the remaining positive values are normalised so that the sum of the outputs = 1.

How can I do this?

CodePudding user response:

IIUC, you can just use the relu and softmax activation functions for that:

import tensorflow as tf

inputs = tf.keras.layers.Input((5,))
x = tf.keras.layers.Dense(32, activation='relu')(inputs)
outputs = tf.keras.layers.Dense(32, activation='softmax')(x)
model = tf.keras.Model(inputs, outputs)

x = tf.random.normal((1, 5))
print(model(x))
print(tf.reduce_sum(model(x)))
tf.Tensor(
[[0.02258478 0.0218816  0.03778725 0.02707791 0.02791201 0.01847759
  0.03252319 0.02181962 0.02726094 0.02221758 0.02674739 0.03611234
  0.02821671 0.02606457 0.04022215 0.02933712 0.02975486 0.036876
  0.04303711 0.03443421 0.03356075 0.03135845 0.03266712 0.03934086
  0.02475732 0.04486758 0.02205345 0.0416355  0.04394628 0.03109134
  0.03432642 0.03004995]], shape=(1, 32), dtype=float32)
tf.Tensor(1.0, shape=(), dtype=float32)

So, if x is the output of your previous layer, you can just run:

x = tf.nn.relu(x)
x = tf.nn.softmax(x)
  • Related