scipy.optimize.

check_grad#

scipy.optimize.check_grad(func, grad, x0, *args, epsilon=np.float64(1.4901161193847656e-08), direction='all', rng=None)[Quelle]#

Überprüft die Korrektheit einer Gradientenfunktion, indem sie mit einer (vorwärtsgerichteten) Finite-Differenzen-Näherung des Gradienten verglichen wird.

Parameter:
funccallable func(x0, *args)

Funktion, deren Ableitung überprüft werden soll.

gradcallable grad(x0, *args)

Jacobi-Matrix von func.

x0ndarray

Punkte, an denen grad gegen die Vorwärts-Differenzen-Näherung des Gradienten unter Verwendung von func überprüft werden soll.

args\*args, optional

Zusätzliche Argumente, die an func und grad übergeben werden.

epsilonfloat, optional

Schrittweite, die für die Finite-Differenzen-Näherung verwendet wird. Sie hat den Standardwert sqrt(np.finfo(float).eps), was ungefähr 1,49e-08 entspricht.

directionstr, optional

Wenn auf 'random' gesetzt, werden Gradienten entlang eines zufälligen Vektors verwendet, um grad gegen die Vorwärts-Differenzen-Näherung mit func zu überprüfen. Standardmäßig ist es 'all', in diesem Fall werden alle One-Hot-Richtungsvektoren berücksichtigt, um grad zu überprüfen. Wenn func eine vektorwertige Funktion ist, kann nur 'all' verwendet werden.

rng{None, int, numpy.random.Generator}, optional

Wenn rng als Schlüsselwort übergeben wird, werden andere Typen als numpy.random.Generator an numpy.random.default_rng übergeben, um einen Generator zu instanziieren. Wenn rng bereits eine Generator-Instanz ist, dann wird die bereitgestellte Instanz verwendet. Geben Sie rng für reproduzierbares Funktionsverhalten an.

Wenn dieses Argument positionsabhängig übergeben wird oder seed als Schlüsselwort übergeben wird, gilt das Legacy-Verhalten für das Argument seed.

  • Wenn seed None ist (oder numpy.random), wird die Singleton-Instanz von numpy.random.RandomState verwendet.

  • Wenn seed eine Ganzzahl ist, wird eine neue RandomState-Instanz mit seed verwendet.

  • Wenn seed bereits eine Generator- oder RandomState-Instanz ist, dann wird diese Instanz verwendet.

Geändert in Version 1.15.0: Im Rahmen der SPEC-007-Umstellung von der Verwendung von numpy.random.RandomState zu numpy.random.Generator wurde dieses Schlüsselwort von seed zu rng geändert. Für eine Übergangszeit werden beide Schlüsselwörter weiterhin funktionieren, obwohl nur eines gleichzeitig angegeben werden kann. Nach der Übergangszeit werden Funktionsaufrufe, die das Schlüsselwort seed verwenden, Warnungen ausgeben. Das Verhalten von seed und rng wird oben erläutert, aber nur das Schlüsselwort rng sollte im neuen Code verwendet werden.

Die generierten Zufallszahlen beeinflussen den zufälligen Vektor, entlang dessen die Gradienten berechnet werden, um grad zu überprüfen. Beachten Sie, dass rng nur verwendet wird, wenn das Argument direction auf ‘random’ gesetzt ist.

Rückgabe:
errfloat

Die Quadratwurzel der Summe der Quadrate (d. h. die 2-Norm) der Differenz zwischen grad(x0, *args) und der Finite-Differenzen-Näherung von grad, die func an den Punkten x0 verwendet.

Siehe auch

approx_fprime

Beispiele

>>> import numpy as np
>>> def func(x):
...     return x[0]**2 - 0.5 * x[1]**3
>>> def grad(x):
...     return [2 * x[0], -1.5 * x[1]**2]
>>> from scipy.optimize import check_grad
>>> check_grad(func, grad, [1.5, -1.5])
2.9802322387695312e-08  # may vary
>>> rng = np.random.default_rng()
>>> check_grad(func, grad, [1.5, -1.5],
...             direction='random', seed=rng)
2.9802322387695312e-08