Dérivée d'un sigmoid en python

Discutez d'informatique ici !
glouphop
Messages: 4
Enregistré le: 31 Mar 2018, 11:48

Dérivée d'un sigmoid en python

par glouphop » 31 Mar 2018, 11:57

Je souhaite afficher la dérivée d'une sigmoïde avec python.
Je reçoit les code d’erreur
TypeError: only length-1 arrays can be converted to Python scalars
pour ds = (math.exp(-x))/((1+math.exp(-x))**2)
et
TypeError: unsupported operand type(s) for -: 'int' and 'list'
pour
ds = sigmoid(x) * (1 - sigmoid(x))

Code: Tout sélectionner
from matplotlib import pyplot as plt
import numpy as np
import math

def sigmoid(x):
    a = []
    for item in x:
        a.append(1/(1+math.exp(-item)))
    return a

x = np.arange(-10., 10., 0.2)
sig = sigmoid(x)
plt.plot(x,sig)
#ds = (math.exp(-x))/((1+math.exp(-x))**2)
ds = sigmoid(x) * (1 - sigmoid(x))
plt.plot(x,ds)
plt.show()



pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Dérivée d'un sigmoid en python

par pascal16 » 31 Mar 2018, 12:20

1 - sigmoid(x)

1 est un scalaire
sigmoid(x) est un vecteur

2 façons de faire
-> transformer 1 en un vecteur rempli de 1 (si la surcharge de + existe)
-> écrire la fonction ds qui passe une à une les coordonnées de ton vecteur sig

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 14:00

Re: Dérivée d'un sigmoid en python

par fatal_error » 31 Mar 2018, 18:27

et aussi, au lieu de ta def de sigmoid(x)
sigmoid(x):
retyrb 1/(1+math.exp(-x))
#(idem un scalaire)
puis trivialament
sig = map(sigmoid, x)
ou bien
def ds(x):
return s(x)*(1-s(x))
yDer=map(ds,x)
la vie est une fête :)

glouphop
Messages: 4
Enregistré le: 31 Mar 2018, 11:48

Re: Dérivée d'un sigmoid en python

par glouphop » 31 Mar 2018, 22:56

La sigmoïde s'affiche correctement, c'est la dérivée que je ne parvient pas à écrire correctement.

glouphop
Messages: 4
Enregistré le: 31 Mar 2018, 11:48

Re: Dérivée d'un sigmoid en python

par glouphop » 01 Avr 2018, 17:01

J'ai résolut le problème avec numpy à la place de math.
Code: Tout sélectionner
import numpy as np
import sympy as sp
x = sp.Symbol('x')

from scipy.misc import derivative

def f(x):
    return 1/(1+np.exp(-x))

def d(x):
    return derivative(f,x)

import matplotlib as mpl
import matplotlib.pyplot as plt

y=np.linspace(-3,3)
plt.plot(y,f(y))
plt.plot(y,d(y))

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Dérivée d'un sigmoid en python

par pascal16 » 01 Avr 2018, 21:45

Version avec ton code modifié, ie avec des fonctions vectorielles :

Code: Tout sélectionner
from matplotlib import pyplot as plt
import numpy as np
import math

def sigmoid(x):
    a = []
    for item in x:
        a.append(1/(1+math.exp(-item)))
    return a

def ds(x):
    a = []
    for item in x:
        b=1/(1+math.exp(-item))
        a.append(b(1-b))
    return a

x = np.arange(-10., 10., 0.2)
sig = sigmoid(x)
plt.plot(x,sig)
dsig=ds(x)
plt.plot(x,dsig)
plt.show()

glouphop
Messages: 4
Enregistré le: 31 Mar 2018, 11:48

Re: Dérivée d'un sigmoid en python

par glouphop » 02 Avr 2018, 07:21

Merci Pascal16 ça marche avec une petite correction. Avec ton code j’obtiens pour la ligne 15 [a.append(b(1-b))] le message d'erreur TypeError: 'float' object is not callable, le problème venant de l’omission de * entre b et (1-b).

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Dérivée d'un sigmoid en python

par pascal16 » 02 Avr 2018, 15:27

oui, je n'étais pas sur mon pc avec pyzo et python dessus, j'ai réécris le code de mémoire, sans tester.
Ce n 'est peut-être pas le plus beau code au monde, mais si plus tard tu programmes, tu te feras ta propre idée du 'beau' code.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite