Jak upravit tuto funkci MyFunc, aby dávala (přibližně) stejný výsledek, ale derivace nebyla nulová? Předpokládám, že to nějak souvisí s Diracovou distribucí, ale nevím, jak ji do toho algoritmu dostat.
from jax import grad
import numpy as np
import jax.nn as nn
def MyFunc(coefs):
a = coefs[0]
b = coefs[1]
c = coefs[2]
if a > b:
return 30.0
elif b > c:
return 20.0
else:
return 10.0
myFuncDeriv = grad (MyFunc)
# Zde to ve všech případech vytiskne zero gradient [0. 0. 0.]
print (myFuncDeriv(np.random.sample(3)))Zero gradient nedostanu třeba v tomto případě - ale výsledek je příliš vzdálený 30.0 / 20.0 / 10.0
def MyFunc(coefs):
a = coefs[0]
b = coefs[1]
c = coefs[2]
if a > b:
return nn.sigmoid(a) * 30.0
elif b > c:
return nn.sigmoid(b) * 20.0
else:
return nn.sigmoid(c) * 10.0Offline