Hallo everyone,
I’m very new in the forum and also new-worker with tensorflow/keras. Last time I received a mail from a friend (not availabe anymore).
If you have a sigmoid function
** sigma(x) = 1/(1+exp(-x))**
then consider a modified sigmoid function
** sigma(x) = 1/(1+exp(-ax))**
where a is a parameter that controls the steepness of the curve. as a approaches infinity, then the sigmoid function approaches a step function
** step(x) = 1 if x >= 0, and 0 if x < 0**
but this function is not differentiable at x=0 … further, the gradient is 0 everywhere else, so it is not that useful for gradient descent.
However, the step function makes the output 0/1, and the sigmoid function outputs a real number from 0 to 1. Hence, we can convert a neuron with a step activation to a Boolean function, but not the neuron with a sigmoid activation.
Since sigmoid approximates step, we can train with a sigmoid, and then replace it with a step function (this is roughly what happens when we train perceptrons). However, we lose some accuracy doing this.
I trained my NN with 2 layers (14 neurons at the 1st hidden layer using linear activation and 1 neuron in the last layer using sgmoid). I have binary data (0/1) as inputs and as output.
My question is to know how to replace the sigmoid activation by the step_function at the testing phase as suggested by my friend ?
I tried
Blockquote
class BNN(models.Sequential):
def __init__(self):
super().__init__()
self.add((Input(shape=(14,))))
self.add(Dense(14, activation='linear', kernel_initializer='glorot_uniform',name='input_layer',bias_initializer='glorot_uniform',use_bias=True))
self.add(Dense(1, activation='sigmoid', kernel_initializer='glorot_uniform',
name='output_layer',use_bias=True))
Blockquote
Blockquote
from tensorflow import nn
from tensorflow import round as kround
def step_sigm(x):
return kround(nn.sigmoid(x))
model.layers[1].activation=step_sigm
Blockquote
but seems not to work since I didn’t notice any modification on weights or something else.
Could someone help me out please how to set this step_function as activation in testing phase using tensorflow/keras ?
Many Thanks for any help