„Keras“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
Themenring, siehe WP:ASV |
BBCLCD (Diskussion | Beiträge) K + wikilink |
||
(32 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Infobox Software |
{{Infobox Software |
||
| |
|Name = |
||
| |
|Logo = [[Datei:Keras logo.svg|200px]] |
||
|Screenshot = |
|||
| Maintainer = Community-Projekt, initiiert durch François Chollet |
|||
|Beschreibung = |
|||
| AktuelleVersion = 2.2.0 <ref>{{Internetquelle | url= https://github.com/keras-team/keras/releases | titel= Keras 2.2.0 |sprache=englisch| datum= 7.6.2018 | zugriff=2018-07-09}}</ref> |
|||
|Maintainer = Community-Projekt, initiiert durch François Chollet |
|||
| Betriebssystem = [[Plattformunabhängigkeit]] |
|||
|Hersteller = |
|||
| Programmiersprache = [[Python_(Programmiersprache)|Python]] |
|||
|Erscheinungsjahr = |
|||
| Kategorie = [[Künstliches neuronales Netz|neurale Netze]] |
|||
|AktuelleVersion = <!-- Wikidata --> |
|||
| Lizenz = [[MIT-Lizenz]] |
|||
|AktuelleVersionFreigabeDatum = |
|||
| Website = [https://keras.io/ Keras.io] |
|||
|AktuelleVorabVersion = |
|||
|AktuelleVorabVersionFreigabeDatum = |
|||
|Betriebssystem = [[Plattformunabhängigkeit]] |
|||
|Programmiersprache = [[Python (Programmiersprache)|Python]] |
|||
|Kategorie = [[Künstliches neuronales Netz|neuronale Netze]] |
|||
|Lizenz = [[MIT-Lizenz]] |
|||
|Deutsch = |
|||
|Website = [https://keras.io/ Keras.io] |
|||
|Dateien = |
|||
}} |
}} |
||
'''Keras''' ist eine [[ |
'''Keras''' ist eine [[Open Source]] [[Deep Learning|Deep-Learning]]-Bibliothek, geschrieben in [[Python (Programmiersprache)|Python]]. Sie wurde von [[François Chollet]] initiiert und erstmals am 28. März 2015 veröffentlicht.<ref>{{Internetquelle |url=https://github.com/keras-team/keras/commit/37a1db225420851cc668600c49697d9a2057f098 |titel=Add initial public version of Keras |datum=2015-03-28 |sprache=en |abruf=2018-07-09}}</ref> Keras bietet eine einheitliche Schnittstelle für verschiedene [[Front-End und Back-End|Backends]], darunter [[TensorFlow]], [[Microsoft Cognitive Toolkit]] (vormals CNTK) und [[Theano (Deep Learning)|Theano]]. Das Ziel von Keras ist es, die Anwendung dieser Bibliotheken so einsteiger- und nutzerfreundlich wie möglich zu machen.<ref>{{Internetquelle |url=https://keras.io/backend/ |titel=Keras backends |datum=2018-01-04 |sprache=en |abruf=2018-07-09}}</ref> |
||
Seit dem Release von |
Seit dem Release von TensorFlow 1.4 ist Keras Teil der Tensorflow Core API, jedoch wird Keras als eigenständige Bibliothek weitergeführt, da es laut François Chollet nicht als Schnittstelle für Tensorflow, sondern als Schnittstelle für viele Bibliotheken gedacht ist.<ref>{{Internetquelle |url=https://github.com/tensorflow/tensorflow/releases/tag/v1.4.0 |titel=Release TensorFlow 1.4.0 |datum=2017-11-02 |sprache=en |abruf=2018-07-09}}</ref><ref>{{Internetquelle |url=https://github.com/keras-team/keras/issues/5050 |titel=Good news, Tensorflow chooses Keras! #5050 |datum=2017-01-16 |sprache=en |abruf=2018-07-09}}</ref> Mit dem Release von Keras 2.4 wurde die Multi-Backend-Unterstützung eingestellt. Seitdem verweist Keras direkt auf die Implementierung von Tensorflow 2.<ref>{{Internetquelle |url=https://github.com/keras-team/keras |titel=keras-team/keras |sprache=en |abruf=2020-06-30}}</ref> |
||
<ref>{{Internetquelle | url= https://github.com/keras-team/keras/issues/5050 | titel= Good news, Tensorflow chooses Keras! #5050 |sprache=englisch| datum= 16.1.2017 | zugriff=2018-07-09}}</ref> |
|||
== Beispiel == |
== Beispiel == |
||
Das folgende Beispiel soll die grundlegende Funktionsweise darstellen |
Das folgende Beispiel soll die grundlegende Funktionsweise darstellen. Darin wird einem neuronalen Netzwerk mithilfe von Keras die Funktion eines [[Exklusiv-Oder-Gatter]]s beigebracht: |
||
<syntaxhighlight lang="python" line="1"> |
<syntaxhighlight lang="python" line="1"> |
||
# |
# Über TensorFlow laden |
||
# |
|||
from keras.layers import Dense,Input |
|||
# from tensorflow.keras.layers import Dense |
|||
# from tensorflow.keras.models import Sequential |
|||
# |
|||
# oder |
|||
# |
|||
# Aus Keras direkt laden |
|||
from keras.layers import Dense |
|||
from keras.models import Sequential |
from keras.models import Sequential |
||
#Numpy laden |
# Numpy laden und festlegen des Zufalls-Startwertes |
||
import numpy as np |
import numpy as np |
||
np.random.seed(1337) |
|||
# Matplotlib zur grafischen Darstellung laden |
|||
#Daten in Listen speichern |
|||
import matplotlib.pyplot as plt |
|||
Eingangswerte = np.array([[0,0],[0,1],[1,0],[1,1]]) |
|||
Ausgangswerte = np.array([[0],[1],[1],[0]]) |
|||
# Daten in Arrays speichern |
|||
eingangswerte = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) |
|||
ausgangswerte = np.array([[0], [1], [1], [0]]) |
|||
# Erstellt das Model mit 2 Eingangsnodes, 2 Mittelnodes und einer Ausgangsnode |
|||
num_inner = 2 |
|||
#Erstellt das Model mit 2 Eingangsnodes, 32 Mittelnodes und einer Aussgangsnode |
|||
model = Sequential() |
model = Sequential() |
||
model.add(Dense( |
model.add(Dense(num_inner, input_dim=2, activation='sigmoid')) |
||
model.add(Dense(1 |
model.add(Dense(1)) |
||
# |
# Kompiliert das Model, damit es spaeter verwendet werden kann |
||
model.compile(loss='mean_squared_error', |
model.compile(loss='mean_squared_error', |
||
optimizer='adam', |
optimizer='adam', |
||
metrics=['accuracy']) |
metrics=['accuracy']) |
||
#Trainiert das Model mit den Eingangs- und den entsprechenden Ausgangswerten fuer |
# Trainiert das Model mit den Eingangs- |
||
# und den entsprechenden Ausgangswerten fuer 10000 Epochen |
|||
model.fit(x= |
model.fit(x=eingangswerte, y=ausgangswerte, epochs=10000, verbose=0) |
||
#Testet die Eingangsdaten und schreibt die Ergebnisse in die |
# Testet die Eingangsdaten und schreibt die Ergebnisse in die Konsole |
||
print(model.predict( |
print(model.predict(eingangswerte)) |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
Als Ausgabe erhält man folgendes: |
|||
Als Ausgabe erhält man folgendes: |
|||
<syntaxhighlight lang="python" line="1"> |
<syntaxhighlight lang="python" line="1"> |
||
[[ |
[[ 8.34465027e-07] # Eingang 0 und 0, zu erwartender Ausgang 0 |
||
[ |
[ 9.99996364e-01] # Eingang 0 und 1, zu erwartender Ausgang 1 |
||
[ |
[ 9.99996185e-01] # Eingang 1 und 0, zu erwartender Ausgang 1 |
||
[ |
[ 5.48362732e-06]] # Eingang 1 und 1, zu erwartender Ausgang 0 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
Das Modell ist mit zwei Eingangsknoten, zwei Mittelknoten und einem Ausgangsknoten sehr einfach. Es braucht jedoch 10000 Epochen, um zu |
|||
guten Ergebnissen zu kommen. Eine andere Aktivierungsfunktion, hier tanh, kann die Anzahl der Epochen auf 1000 reduzieren: |
|||
<syntaxhighlight lang="python" line="1"> |
|||
# Erstellt das Model mit 2 Eingangsnodes, 32 Mittelnodes und einer Ausgangsnode |
|||
model = Sequential() |
|||
model.add(Dense(32, input_dim=2, activation='tanh')) |
|||
model.add(Dense(1, activation='tanh')) |
|||
</syntaxhighlight> |
|||
Als Ausgabe erhält man folgendes: |
|||
<syntaxhighlight lang="python" line="1"> |
|||
Using Theano backend. |
|||
[[0.00473237] |
|||
[0.944603 ] |
|||
[0.9461131 ] |
|||
[0.00609871]] |
|||
</syntaxhighlight> |
|||
Die Modellanalyse kann direkt mit numpy und matplotlib erfolgen. In diesem Fall werden dem Modell gerasterte Eingabedaten übergeben |
|||
und die Ausgabe grafisch zweidimensional in einem Contourplot dargestellt. Ebenso werden die Grenzen der Klassifizierung als Linien |
|||
und die diskreten Eingabewerte als Punkte dargestellt: |
|||
<syntaxhighlight lang="python" line="1"> |
|||
# Bereitet die grafische Ausgabe mittels contourf vor |
|||
# und rastert die Eingabewerte fuer das Modell |
|||
x = np.linspace(-0.25, 1.25, 100) |
|||
(X1_raster, X2_raster) = np.meshgrid(x, x) |
|||
X1_vektor = X1_raster.flatten() |
|||
X2_vektor = X2_raster.flatten() |
|||
# Nutzt die gerasterten Eingabewerte und erzeugt Ausgabewerte |
|||
eingangswerte_grafik = np.vstack((X1_vektor, X2_vektor)).T |
|||
ausgangswerte_grafik = model.predict(eingangswerte_grafik).reshape(X1_raster.shape) |
|||
# Fragt die Gewichte der Verbindungen und die Bias-Daten ab |
|||
(gewichte, bias) = model.layers[0].get_weights() |
|||
# Contourplot der gerasterten Ausgangswerte in leicht vergroessertem |
|||
# Bereich und Legende |
|||
plt.contourf(X1_raster, X2_raster, ausgangswerte_grafik, 100) |
|||
plt.xlim(-0.25, 1.25) |
|||
plt.ylim(-0.25, 1.25) |
|||
plt.xlabel("Eingabewert $x_1$") |
|||
plt.ylabel("Eingabewert $x_2$") |
|||
plt.colorbar() |
|||
# Eintragen der Eingangsdaten in die Grafik |
|||
plt.scatter(np.array([0, 0, 1, 1]), np.array([0, 1, 0, 1]), color="red") |
|||
# Plot der Klassifizierungs-"Begrenzungslinien" der Aktivierungsfunktionen |
|||
for i in range(num_inner): |
|||
plt.plot(x, |
|||
-gewichte[0, i]/gewichte[1, i]*x |
|||
- bias[i]/gewichte[1, i], color="black") |
|||
plt.show() |
|||
</syntaxhighlight> |
|||
Die Darstellungen für beide Varianten des Modells sehen wie folgt aus (links erste Variante, 10000 Epochen; rechts zweite Variante, 1000 Epochen): |
|||
[[Datei:Keras model inner2 epochs10000.svg|500px]] |
|||
[[Datei:Modell inner32 epochs1000.svg|500px]] |
|||
== Literatur == |
|||
* {{Literatur |
|||
|Autor=François Chollet |
|||
|Hrsg= |
|||
|Titel=Deep Learning mit Python und Keras: Das Praxis-Handbuch vom Entwickler der Keras-Bibliothek |
|||
|Auflage= |
|||
|Verlag=mitp |
|||
|Ort= |
|||
|Datum=2018 |
|||
|ISBN=978-3-95845-838-3 |
|||
|Seiten=}} |
|||
==Weblinks== |
== Weblinks == |
||
* [https://keras.io/ Offizielle Website] |
* [https://keras.io/ Offizielle Website] |
||
* colab.research.google.com: [https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/fashion_mnist.ipynb Fashion MNIST with Keras and TPUs], Jupyter Notebook |
|||
* {{Internetquelle |
|||
|autor= |
|||
|url=https://colab.research.google.com/github/tensorflow/tpu/blob/master/tools/colab/shakespeare_with_tpu_and_keras.ipynb |
|||
|titel=Predict Shakespeare with Cloud TPUs and Keras |
|||
|werk=colab.research.google.com |
|||
|datum= |
|||
|abruf=2018-10-16}} |
|||
* {{YouTube |id=J6Ok8p463C4 |titel=Getting Started with Keras (AI Adventures)}}, vom 14. August 2018 |
|||
== Einzelnachweise == |
== Einzelnachweise == |
||
Zeile 62: | Zeile 164: | ||
[[Kategorie:Python-Bibliothek]] |
[[Kategorie:Python-Bibliothek]] |
||
[[Kategorie: |
[[Kategorie:Deep Learning]] |
||
[[Kategorie:Neuroinformatik]] |
|||
[[Kategorie:Freie numerische Software]] |
|||
[[Kategorie:Mathematikbibliothek]] |
Aktuelle Version vom 10. August 2024, 18:16 Uhr
Keras
| |
---|---|
Basisdaten
| |
Hauptentwickler | Community-Projekt, initiiert durch François Chollet |
Entwickler | François Chollet |
Aktuelle Version | 3.5.0[1] (12. August 2024) |
Betriebssystem | Plattformunabhängigkeit |
Programmiersprache | Python |
Kategorie | neuronale Netze |
Lizenz | MIT-Lizenz |
Keras.io |
Keras ist eine Open Source Deep-Learning-Bibliothek, geschrieben in Python. Sie wurde von François Chollet initiiert und erstmals am 28. März 2015 veröffentlicht.[2] Keras bietet eine einheitliche Schnittstelle für verschiedene Backends, darunter TensorFlow, Microsoft Cognitive Toolkit (vormals CNTK) und Theano. Das Ziel von Keras ist es, die Anwendung dieser Bibliotheken so einsteiger- und nutzerfreundlich wie möglich zu machen.[3]
Seit dem Release von TensorFlow 1.4 ist Keras Teil der Tensorflow Core API, jedoch wird Keras als eigenständige Bibliothek weitergeführt, da es laut François Chollet nicht als Schnittstelle für Tensorflow, sondern als Schnittstelle für viele Bibliotheken gedacht ist.[4][5] Mit dem Release von Keras 2.4 wurde die Multi-Backend-Unterstützung eingestellt. Seitdem verweist Keras direkt auf die Implementierung von Tensorflow 2.[6]
Beispiel
[Bearbeiten | Quelltext bearbeiten]Das folgende Beispiel soll die grundlegende Funktionsweise darstellen. Darin wird einem neuronalen Netzwerk mithilfe von Keras die Funktion eines Exklusiv-Oder-Gatters beigebracht:
# Über TensorFlow laden
#
# from tensorflow.keras.layers import Dense
# from tensorflow.keras.models import Sequential
#
# oder
#
# Aus Keras direkt laden
from keras.layers import Dense
from keras.models import Sequential
# Numpy laden und festlegen des Zufalls-Startwertes
import numpy as np
np.random.seed(1337)
# Matplotlib zur grafischen Darstellung laden
import matplotlib.pyplot as plt
# Daten in Arrays speichern
eingangswerte = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
ausgangswerte = np.array([[0], [1], [1], [0]])
# Erstellt das Model mit 2 Eingangsnodes, 2 Mittelnodes und einer Ausgangsnode
num_inner = 2
model = Sequential()
model.add(Dense(num_inner, input_dim=2, activation='sigmoid'))
model.add(Dense(1))
# Kompiliert das Model, damit es spaeter verwendet werden kann
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['accuracy'])
# Trainiert das Model mit den Eingangs-
# und den entsprechenden Ausgangswerten fuer 10000 Epochen
model.fit(x=eingangswerte, y=ausgangswerte, epochs=10000, verbose=0)
# Testet die Eingangsdaten und schreibt die Ergebnisse in die Konsole
print(model.predict(eingangswerte))
Als Ausgabe erhält man folgendes:
[[ 8.34465027e-07] # Eingang 0 und 0, zu erwartender Ausgang 0
[ 9.99996364e-01] # Eingang 0 und 1, zu erwartender Ausgang 1
[ 9.99996185e-01] # Eingang 1 und 0, zu erwartender Ausgang 1
[ 5.48362732e-06]] # Eingang 1 und 1, zu erwartender Ausgang 0
Das Modell ist mit zwei Eingangsknoten, zwei Mittelknoten und einem Ausgangsknoten sehr einfach. Es braucht jedoch 10000 Epochen, um zu guten Ergebnissen zu kommen. Eine andere Aktivierungsfunktion, hier tanh, kann die Anzahl der Epochen auf 1000 reduzieren:
# Erstellt das Model mit 2 Eingangsnodes, 32 Mittelnodes und einer Ausgangsnode
model = Sequential()
model.add(Dense(32, input_dim=2, activation='tanh'))
model.add(Dense(1, activation='tanh'))
Als Ausgabe erhält man folgendes:
Using Theano backend.
[[0.00473237]
[0.944603 ]
[0.9461131 ]
[0.00609871]]
Die Modellanalyse kann direkt mit numpy und matplotlib erfolgen. In diesem Fall werden dem Modell gerasterte Eingabedaten übergeben und die Ausgabe grafisch zweidimensional in einem Contourplot dargestellt. Ebenso werden die Grenzen der Klassifizierung als Linien und die diskreten Eingabewerte als Punkte dargestellt:
# Bereitet die grafische Ausgabe mittels contourf vor
# und rastert die Eingabewerte fuer das Modell
x = np.linspace(-0.25, 1.25, 100)
(X1_raster, X2_raster) = np.meshgrid(x, x)
X1_vektor = X1_raster.flatten()
X2_vektor = X2_raster.flatten()
# Nutzt die gerasterten Eingabewerte und erzeugt Ausgabewerte
eingangswerte_grafik = np.vstack((X1_vektor, X2_vektor)).T
ausgangswerte_grafik = model.predict(eingangswerte_grafik).reshape(X1_raster.shape)
# Fragt die Gewichte der Verbindungen und die Bias-Daten ab
(gewichte, bias) = model.layers[0].get_weights()
# Contourplot der gerasterten Ausgangswerte in leicht vergroessertem
# Bereich und Legende
plt.contourf(X1_raster, X2_raster, ausgangswerte_grafik, 100)
plt.xlim(-0.25, 1.25)
plt.ylim(-0.25, 1.25)
plt.xlabel("Eingabewert $x_1$")
plt.ylabel("Eingabewert $x_2$")
plt.colorbar()
# Eintragen der Eingangsdaten in die Grafik
plt.scatter(np.array([0, 0, 1, 1]), np.array([0, 1, 0, 1]), color="red")
# Plot der Klassifizierungs-"Begrenzungslinien" der Aktivierungsfunktionen
for i in range(num_inner):
plt.plot(x,
-gewichte[0, i]/gewichte[1, i]*x
- bias[i]/gewichte[1, i], color="black")
plt.show()
Die Darstellungen für beide Varianten des Modells sehen wie folgt aus (links erste Variante, 10000 Epochen; rechts zweite Variante, 1000 Epochen):
Literatur
[Bearbeiten | Quelltext bearbeiten]- François Chollet: Deep Learning mit Python und Keras: Das Praxis-Handbuch vom Entwickler der Keras-Bibliothek. mitp, 2018, ISBN 978-3-95845-838-3.
Weblinks
[Bearbeiten | Quelltext bearbeiten]- Offizielle Website
- colab.research.google.com: Fashion MNIST with Keras and TPUs, Jupyter Notebook
- Predict Shakespeare with Cloud TPUs and Keras. In: colab.research.google.com. Abgerufen am 16. Oktober 2018.
- Getting Started with Keras (AI Adventures) auf YouTube, vom 14. August 2018
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Release 3.5.0. 12. August 2024 (abgerufen am 22. August 2024).
- ↑ Add initial public version of Keras. 28. März 2015, abgerufen am 9. Juli 2018 (englisch).
- ↑ Keras backends. 4. Januar 2018, abgerufen am 9. Juli 2018 (englisch).
- ↑ Release TensorFlow 1.4.0. 2. November 2017, abgerufen am 9. Juli 2018 (englisch).
- ↑ Good news, Tensorflow chooses Keras! #5050. 16. Januar 2017, abgerufen am 9. Juli 2018 (englisch).
- ↑ keras-team/keras. Abgerufen am 30. Juni 2020 (englisch).