# Sigmoid function

**URL:** <https://discourse.julialang.org/t/sigmoid-function/40614>\
**Category:** Machine Learning\
**Tags:** question\
**Created:** [June 2, 2020, 2:44pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614 "2020-06-02T14:44:43Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Shirin](https://avatars.discourse-cdn.com/v4/letter/s/df788c/32.png) [@Shirin](https://discourse.julialang.org/u/Shirin)\
**Post date:** [June 2, 2020, 2:44pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/1 "2020-06-02T14:44:43Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Elrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elrod/32/22461_2.png) [@Elrod](https://discourse.julialang.org/u/Elrod)\
**Post date:** [June 2, 2020, 3:05pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/2 "2020-06-02T15:05:27Z")

</div>

```julia
sigmoid(x)=1 ./(1 .+exp(.-x))
sigmoid(x)=s

```

The second line is replacing the first definition.

---

<div class="post-metadata">

**Author:** ![mohamed82008](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mohamed82008/32/18171_2.png) [@mohamed82008](https://discourse.julialang.org/u/mohamed82008)\
**Post date:** [June 2, 2020, 3:12pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/3 "2020-06-02T15:12:43Z")

</div>

> [@Shirin](#):
>
> d(s)=x .\* (1 .- x)

Also in the function above, `x` is not defined, `s` should be `x`.

---

<div class="post-metadata">

**Author:** ![Shirin](https://avatars.discourse-cdn.com/v4/letter/s/df788c/32.png) [@Shirin](https://discourse.julialang.org/u/Shirin)\
**Post date:** [June 2, 2020, 3:19pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/4 "2020-06-02T15:19:37Z")

</div>

I erased it, but its still causing error !

---

<div class="post-metadata">

**Author:** ![Shirin](https://avatars.discourse-cdn.com/v4/letter/s/df788c/32.png) [@Shirin](https://discourse.julialang.org/u/Shirin)\
**Post date:** [June 2, 2020, 3:20pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/5 "2020-06-02T15:20:15Z")

</div>

I changed s to x but the output is still the same !

---

<div class="post-metadata">

**Author:** ![Shirin](https://avatars.discourse-cdn.com/v4/letter/s/df788c/32.png) [@Shirin](https://discourse.julialang.org/u/Shirin)\
**Post date:** [June 2, 2020, 3:23pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/6 "2020-06-02T15:23:48Z")

</div>

Now the code is :  
Using Flux  
Sigmoid(x)= 1 ./(1 .+exp(.-x))  
d(x)=x .\* (1 .- x)  
d([1 2 3])  
Wrong output!

---

<div class="post-metadata">

**Author:** ![Elrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elrod/32/22461_2.png) [@Elrod](https://discourse.julialang.org/u/Elrod)\
**Post date:** [June 2, 2020, 3:46pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/7 "2020-06-02T15:46:43Z")

</div>

```julia
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.

---

<div class="post-metadata">

**Author:** ![r2cp](https://avatars.discourse-cdn.com/v4/letter/r/67e7ee/32.png) [@r2cp](https://discourse.julialang.org/u/r2cp)\
**Post date:** [June 2, 2020, 5:01pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/8 "2020-06-02T17:01:32Z")

</div>

I tried the following

```julia
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`:

```julia
using Flux
sigmoid(0) #0.5 

```

---

<div class="post-metadata">

**Author:** ![Shirin](https://avatars.discourse-cdn.com/v4/letter/s/df788c/32.png) [@Shirin](https://discourse.julialang.org/u/Shirin)\
**Post date:** [June 2, 2020, 6:25pm UTC](https://discourse.julialang.org/t/sigmoid-function/40614/9 "2020-06-02T18:25:18Z")

</div>

It worked!!  
I’m very grateful for your greatest help rafael !
