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.Generatorannumpy.random.default_rngübergeben, um einenGeneratorzu instanziieren. Wenn rng bereits eineGenerator-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 vonnumpy.random.RandomStateverwendet.Wenn seed eine Ganzzahl ist, wird eine neue
RandomState-Instanz mit seed verwendet.Wenn seed bereits eine
Generator- oderRandomState-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.RandomStatezunumpy.random.Generatorwurde 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
gradzu überprüfen. Beachten Sie, dass rng nur verwendet wird, wenn das Argument direction auf ‘random’ gesetzt ist.
- funccallable
- 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
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