Heim  >  Artikel  >  Backend-Entwicklung  >  Wie zeichne ich mit Python allgemeine Aktivierungsfunktionskurven?

Wie zeichne ich mit Python allgemeine Aktivierungsfunktionskurven?

PHPz
PHPznach vorne
2023-04-26 12:01:071726Durchsuche

Vorbereitungsarbeit: Numpy, Matplotlib, Sympy herunterladen

pip install numpy matplotlib sympy

Dokumentation der entsprechenden Bibliothek finden:

Numpy-Dokumentation Matplotlib-Dokumentation Sympy-Dokumentation

#🎜 🎜# Beim Schreiben von Code habe ich festgestellt, dass vscode mein Python nicht formatieren kann? Nach der Überprüfung stellt sich heraus, dass flake8 und yapf installiert werden müssen, und das andere ist ein Formatierungstool. Konfigurieren Sie dann die Einstellung , sehen wir uns an, wie man Code schreibt Aktivierungsfunktion Es gibt zwei Möglichkeiten, einfach die Berechnungsergebnisse zu erhalten, aber wenn Sie die Ableitung selbst finden müssen, müssen Sie Sympy verwenden, um die Funktionsformel zu schreiben.

Die Art und Weise, wie Sympy eine Funktion ausdrückt, ist wie folgt:

"python.linting.flake8Enabled": true, // 规范检查工具
"python.formatting.provider": "yapf", // 格式化工具
"python.linting.flake8Args": ["--max-line-length=248"], // 设置单行最长字符限制
"python.linting.pylintEnabled": false, // 关闭pylint工具

diff ist die Ableitungsfunktion von Sympy

# 🎜🎜#Dann definieren wir den Ausdruck der Aktivierungsfunktion

from sympy import symbols, evalf, diff
# 我们先要定义自变量是什么,这边按需求来,这是文档的例子有两个变量
x, y = symbols('x y')
# 然后我们写出函数表达式
expr = x + 2*y
# 输出看一下是什么东西
expr # x + 2*y
# 接着就要用我们定义的函数了
expr.evalf(subs={x: 10, y: 20}) # 50.000000
# 再对我们的函数求导
diff(expr, x, 1) # 对x进行求导得出结果 1,这也是表达式
def sigmoid():
    """
    定义sigmoid函数
    """
    x = symbols('x')
    return 1. / (1 + exp(-x))
def tanh():
    """
    定义tanh函数
    """
    x = symbols('x')
    return (exp(x) - exp(-x)) / (exp(x) + exp(-x))
def relu():
    """
    定义ReLU函数
    """
    x = symbols('x')
    return Piecewise((0, x < 0), (x, x >= 0))
def leakyRelu():
    """
    定义Leaky ReLu函数
    """
    x = symbols(&#39;x&#39;)
    return Piecewise((0.1 * x, x < 0), (x, x >= 0))
def softMax(x: np.ndarray):
    """
    定义SoftMax函数\n
    """
    exp_x = np.exp(x)
    print(exp_x, np.sum(exp_x))
    return exp_x / np.sum(exp_x)

Dann definieren wir eine Ableitungsfunktion

def softmax_derivative(x):
    """
    定义SoftMax导数函数\n
    x - 输入x向量
    """
    s = softMax(x)
    return s * (1 - s)

Hier stellt sich die Frage, warum die anderen Funktionen eine, Und es gibt zwei SoftMax-Funktionen, eine ist die SoftMax-Funktionsdefinition und die andere ist die Definition ihrer Ableitungsfunktion?

Schauen wir uns an, wie die SoftMax-Funktion aussieht

sympy.core.function.diff(f, *symbols, **kwargs)

Der Nenner der SoftMax-Funktion muss zum Schreiben der Akkumulation verwendet werden Prozess, der nicht mit numpy.sum übergeben werden kann. Verwenden Sie sympy, um die Ableitung zu finden (jemand kann es, ich weiß nicht warum, vielleicht wird es auf unterschiedliche Weise verwendet. Wenn Sie es wissen, können Sie es mit mir teilen) und mit sympy.Sum oder sympy.summation kann jedes Mal nur in Einheiten von 1 von i bis n addiert werden #🎜 🎜#

Zum Beispiel: Angenommen, es gibt einen Ausdruck m**x (m hoch x) sympy.Sum( m**x, (x, 0, 100)), dann ist das Ergebnis m**100 + m**99 + m**98 + m**1, und das von mir definierte Ndarray ist np.arange(-10 , 10, 0,05), der die Anforderungen nicht erfüllen kann und die Ableitung nicht durchgeführt werden kann.

Also habe ich zwei Funktionen geschrieben, eine ist die ursprüngliche Funktionsdefinition und die andere ist die Definition der Ableitungsfunktion. Und wie ich bereits sagte, kann es tatsächlich nur mit Numpy vervollständigt werden, wenn es sich um eine Auswertung handelt.

Zu diesem Zeitpunkt wurden alle Funktionen und Ableitungsfunktionen von uns definiert

Wie zeichne ich mit Python allgemeine Aktivierungsfunktionskurven?Der zweite Schritt besteht darin, Matplotlib zum Zeichnen der Kurve zu verwenden

# 🎜🎜##🎜 🎜#Zunächst müssen wir wissen, was Matplotlib hat

matplotlib umfasst hauptsächlich Figure, Axes, Axis und Artist. Ich verstehe, dass die Figur die Leinwand ist, und wir müssen die Leinwand vorbereiten, bevor wir die Figur zeichnen; Achsen und Achsen werden beide als Achsen übersetzt, aber Achsen sollten die Koordinatenachsen sein, und die Achse ist eine der Koordinatenachsen, die der Künstler kann Element hinzugefügt werden

Wenn Sie ein einfaches Diagramm zeichnen möchten, können Sie dies tun

def derivate(formula, len, variate):
    """
    定义函数求导
      formula:函数公式
      len:求导次数
      variate:自变量
    """
    return diff(formula, variate, len)

Dann sind wir bereit, unsere Funktionskurve zu zeichnen

x = np.linspace(0, 2, 100)  # Sample data.

# Note that even in the OO-style, we use `.pyplot.figure` to create the Figure.
fig, ax = plt.subplots(figsize=(5, 2.7), layout=&#39;constrained&#39;)
ax.plot(x, x, label=&#39;linear&#39;)  # Plot some data on the axes.
ax.plot(x, x**2, label=&#39;quadratic&#39;)  # Plot more data on the axes...
ax.plot(x, x**3, label=&#39;cubic&#39;)  # ... and some more.
ax.set_xlabel(&#39;x label&#39;)  # Add an x-label to the axes.
ax.set_ylabel(&#39;y label&#39;)  # Add a y-label to the axes.
ax.set_title("Simple Plot")  # Add a title to the axes.
ax.legend()  # Add a legend.
#🎜🎜 #Nach dem Hinzufügen von laben Danach habe ich über zwei Zeichenmethoden nachgedacht. Eine besteht darin, alle Kurven in einer Figur zu zeichnen, sie aber in verschiedene Achsen zu unterteilen

Mit der Subplot-Funktion können Sie die Figur in zwei Teile teilen Zeilen und 2 Spalten von Achsen

plt.xlabel(&#39;x label&#39;) // 两种方式加label,一种为ax.set_xlabel(面向对象),一种就是这种(面向函数)
plt.ylabel(&#39;y label&#39;)
Die zweite besteht darin, die angegebene Funktion durch Eingabe des Funktionsnamens zu zeichnen

plt.subplot(2, 2, 1, adjustable=&#39;box&#39;) # 1行1列
plt.subplot(2, 2, 2, adjustable=&#39;box&#39;) # 1行2列

Nach Erhalt der Eingabe

do = input( &#39;input function expression what you want draw(sigmoid, tanh, relu, leakyRelu, softMax)\n&#39; )
#🎜🎜 #Dies ist vollständig, beigefügt 1 Zhang Seller Show

Das obige ist der detaillierte Inhalt vonWie zeichne ich mit Python allgemeine Aktivierungsfunktionskurven?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen