Hello,
I have difficulty with getting the derivate (Gradient ) of sigmoid!
using Flux
sigmoid(x)=1 ./(1 .+exp(.-x))
sigmoid(x)=s
d(s)=x .* (1 .- x)
d([1 2 3])
it causes error or not outputting correct number!
I would appreciate if you guys can help me,
thank you
sigmoid(x)=1 ./(1 .+exp(.-x))
sigmoid(x)=s
The second line is replacing the first definition.
1 Like
Also in the function above, x
is not defined, s
should be x
.
I erased it, but its still causing error !
I changed s to x but the output is still the same !
Now the code is :
Using Flux
Sigmoid(x)= 1 ./(1 .+exp(.-x))
d(x)=x .* (1 .- x)
d([1 2 3])
Wrong output!
julia> using ForwardDiff
julia> sigmoid(x)= @. 1 / (1 + exp(-x))
sigmoid (generic function with 1 method)
julia> d(x) = @. x * (1 - x)
d (generic function with 1 method)
julia> dsigmoid(x) = d(sigmoid(x))
dsigmoid (generic function with 1 method)
julia> ForwardDiff.derivative(sigmoid, 0.57)
0.23074478122261177
julia> dsigmoid(0.57)
0.23074478122261183
Note that I think it’s better not to add dots in the definitions of sigmoid
and d
, but to instead add them them where you’re calling them. But I have very little experience with Flux, so maybe things are different there.
I tried the following
using Flux
x = [-2:2...]
## Defining sigmoid function
Sigmoid(x) = 1 / (1 + exp(-x))
Sigmoid.(x)
# Getting the gradient
dsigmoid(x) = Flux.gradient(Sigmoid, x)[1]
dsigmoid.(x)
Also sigmoid
is already exported by Flux
:
using Flux
sigmoid(0) #0.5
It worked!!
I’m very grateful for your greatest help rafael !
1 Like