Deep Learning ist eine auf künstlichen neuronalen Netzen basierende maschinelle Lernmethode, die mehrschichtige neuronale Netze nutzt, um die Eigenschaften von Daten automatisch zu lernen. Im Folgenden sind einige gängige Deep-Learning-Algorithmen aufgeführt:
Feedforward-Neuronale Netzwerke sind die grundlegendste Deep-Learning-Architektur, bei der Daten in einer Richtung durch das Netzwerk fließen, ohne Schleifen zu bilden. FNN ist sehr effektiv bei Klassifizierungs- und Regressionsproblemen.
CNN ist ein Deep-Learning-Netzwerk, das speziell für die Verarbeitung von Bilddaten entwickelt wurde. Es verwendet Faltungsschichten, um räumliche Merkmale in Bildern automatisch zu extrahieren. Es wird häufig für Aufgaben wie Bildklassifizierung und Objekterkennung verwendet.
RNN kann Sequenzdaten wie Zeitreihen, Sprachmodelle usw. verarbeiten. Es verwendet eine Schleifenstruktur, damit sich das Netzwerk frühere Eingaben merken kann, und wird häufig bei der Spracherkennung, der Verarbeitung natürlicher Sprache usw. verwendet.
LSTM ist eine verbesserte Version von RNN, die das Problem der langfristigen Abhängigkeit im herkömmlichen RNN löst und es ihm ermöglicht, Schlüsselinformationen über längere Sequenzen hinweg beizubehalten.
Autoencoder sind eine unbeaufsichtigte Lernmethode, die zur Dimensionsreduzierung und Datenentrauschung verwendet wird. Es komprimiert die Eingabedaten in eine niedrigdimensionale verborgene Schicht und versucht dann, die Originaldaten wiederherzustellen.
GAN besteht aus einem Generator, der versucht, realistische Daten zu generieren, und einem Diskriminator, der versucht, zwischen realen und generierten Daten zu unterscheiden. GAN wird häufig für Aufgaben wie Bildgenerierung und Stilübertragung verwendet.
Transformer ist ein auf dem Aufmerksamkeitsmechanismus basierendes Modell, das besonders bei der Verarbeitung natürlicher Sprache herausragend ist. Es kann lange Sequenzdaten verarbeiten und ist im Vergleich zu RNN schneller zu trainieren.
TensorFlowEs handelt sich um ein Open-Source-Framework für maschinelles Lernen, das vom Google Brain-Team entwickelt wurde. Es nutzt das Konzept der Datenflussdiagramme, um Entwicklern den Aufbau komplexer neuronaler Netze zu ermöglichen. Sein Name leitet sich vom „Flow“ (Fluss) des „Tensors“ (mehrdimensionales Array) im Operationsdiagramm ab.
TensorFlow ist in mehreren Schichten konzipiert, um Flexibilität und Entwicklungseffizienz in Einklang zu bringen:
Der typische Prozess zum Entwickeln eines Modells in TensorFlow ist wie folgt:
| Bühne | veranschaulichen |
|---|---|
| Datenaufbereitung | verwendentf.dataAPI zum Lesen, Bereinigen und Vorverarbeiten von Daten. |
| Bauen Sie ein Modell | durchtf.keras.Sequentialoder funktionale API zum Definieren der Netzwerkschicht. |
| Zusammenstellung und Schulung | Stellen Sie den Optimierer (Optimizer) und die Verlustfunktion (Loss Function) ein und führen Sie sie ausmodel.fit()。 |
| Bewertung und Bereitstellung | Überprüfen Sie die Modellgenauigkeit und exportieren Sie es alsSavedModelFormat für die Bereitstellung. |
Das Folgende ist ein Beispiel für die Erstellung eines einfachen linearen Regressionsmodells mit Keras:
Tensorflow astf importieren
numpy als np importieren
# Modell erstellen
model = tf.keras.Sequential([
tf.keras.layers.Dense(units=1, input_shape=[1])
])
# Modell kompilieren
model.compile(optimizer='sgd', loss='mean_squared_error')
# Testdaten vorbereiten
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
#Zugmodell
model.fit(xs, ys, epochs=500, verbose=0)
# Machen Sie Vorhersagen
print("Vorhersageergebnis:", model.predict([10.0]))
Kerasist eine in Python geschriebene High-Level-API für neuronale Netzwerke, die ein schnelles Experimentieren ermöglicht. Es wurde ursprünglich von François Chollet entwickelt und ist jetzt verfügbar alsTensorFlowDie offizielle High-Level-Schnittstelle (tf.keras). Die zentralen Designprinzipien von Keras sind benutzerfreundlich, modular und einfach zu erweitern, sodass Entwickler Deep-Learning-Modelle mit minimalem Programmieraufwand erstellen können.
| Weg | Merkmale | Anwendbare Szenarien |
|---|---|---|
| Sequential API | Einfach Schicht für Schicht, eine nach der anderen. | Lineares Stapelmodell mit einem Eingang und einem Ausgang. |
| Functional API | Kann komplexe Grafiken definieren und mehrere Ein-/Ausgaben unterstützen. | Restnetzwerk (ResNet), Multi-Branch-Modell. |
| Subclassing | durch VererbungModelBenutzerdefiniertes Verhalten der Kategorie. |
F&E-Szenarien, die eine vollständige Kontrolle der Vorwärtsausbreitungslogik erfordern. |
Das Abschließen einer maschinellen Lernaufgabe in Keras umfasst normalerweise die folgenden fünf Schritte:
fit()Die Funktion speist Daten zum Lernen ein.evaluate()Überprüfen Sie die Leistung des Testsatzes.predict()Erstellen Sie Vorhersageergebnisse für neue Daten.Das Folgende ist die Standardmethode zum Erstellen eines einfachen Bildklassifizierungsnetzwerks (z. B. MNIST) mit Keras:
aus tensorflow.keras importieren Ebenen und Modelle
# 1. Sequentielles Modell definieren
model = models.Sequential([
Schichten.Flatten(input_shape=(28, 28)), #Eingabeebene
Schichten.Dense(128, Aktivierung='relu'), # Versteckte Ebene
Layers.Dropout(0.2), # Überanpassung verhindern
Layers.Dense(10, Aktivierung='softmax') # Ausgabeebene
])
# 2. Kompilieren
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 3. Training (vorausgesetzt, x_train, y_train existiert bereits)
# model.fit(x_train, y_train, epochs=5)
Seit TensorFlow 2.0 ist Keras die standardmäßige High-Level-API. Dies bedeutet, dass Sie die einfache Syntax von Keras verwenden und gleichzeitig das zugrunde liegende verteilte Training, die TPU-Beschleunigung und die leistungsstarken Bereitstellungsfunktionen (z. B. TensorFlow Serving) von TensorFlow nutzen können.
In Keras,LayerEs ist die Grundeinheit für den Aufbau neuronaler Netze. Jede Schicht kapselt eine bestimmte Berechnungslogik (z. B. Matrixmultiplikation) und einen Status (Gewichtsgewichtung).weights). Ein Modell verbindet im Wesentlichen mehrere Schichten, um eine Struktur für den Datenfluss zu bilden.
| Kategorie | Häufig verwendete Ebenen (tf.keras.layers) | Hauptfunktionen |
|---|---|---|
| Basisschicht (Kern) | Dense |
Vollständig verbundene Schicht, führen Sie \(y = f(Wx + b)\) aus. |
| Faltungsschicht | Conv2D, Conv1D |
Wird zur Merkmalsextraktion verwendet und häufig in Bildern oder Zeitreihen verwendet. |
| Pooling-Schicht (Pooling) | MaxPooling2D, AveragePooling2D |
Reduzieren Sie die Dimensionalität und den Rechenaufwand unter Beibehaltung wichtiger Funktionen. |
| Wiederkehrende Ebene (wiederkehrend) | LSTM, GRU, SimpleRNN |
Verarbeitet Sequenzdaten (z. B. Text, Aktienkurse) und verfügt über einen Speicher. |
| Regularisierungsschicht (Regularisierung) | Dropout, BatchNormalization |
Verhindern Sie Überanpassung und beschleunigen Sie die Konvergenz. |
'relu', 'sigmoid', 'softmax'), bestimmt die nichtlineare Transformation der Ausgabe.Neben den Layern zur Berechnung von Features gibt es auch spezielle Layer zur Transformation von Datenstrukturen:
Im Folgenden wird gezeigt, wie verschiedene Ebenen in einem Bildverarbeitungsmodell zusammenarbeiten:
aus tensorflow.keras importieren Ebenen und Modelle
model = models.Sequential([
# Die Faltungsschicht extrahiert räumliche Merkmale
Schichten.Conv2D(32, (3, 3), Aktivierung='relu', input_shape=(64, 64, 3)),
# Komprimierungsfunktionen der Pooling-Ebene
Schichten.MaxPooling2D((2, 2)),
# Die Ausgleichsebene ist bereit für die vollständige Verbindung
Schichten.Flatten(),
# Vollständig verbundene Schicht zum Lernen
Schichten.Dense(64, Aktivierung='relu'),
# Dropout, um eine Überanpassung zu verhindern
Schichten.Dropout(0.5),
# Ausgabeebene (unter der Annahme von 10 Kategorien)
Schichten.Dense(10, Aktivierung='softmax')
])
Jede Schicht verfügt über trainierbare Parameter (Trainable Params). Zum BeispielDense(units=10)Wenn die Eingabedimension 50 beträgt, beträgt die Anzahl der Parameter \(50 \times 10\) (Gewicht) + \(10\) (Bias) = \(510\). Sie können verwendenmodel.summary(), um die Parameterverteilung jeder Ebene anzuzeigen.
Feedforward Neural Network (FNN) ist die grundlegendste neuronale Netzwerkarchitektur. Daten werden von der Eingabeebene eingegeben, in einer oder mehreren verborgenen Ebenen berechnet und schließlich Ergebnisse von der Ausgabeebene ausgegeben. Der Datenfluss erfolgt immer vorwärts, ohne Schleifen oder Rückkopplungspfade.
Verwenden Sie Folgendestf.keras.SequentialErstellen Sie ein standardmäßiges mehrschichtiges Perzeptron (MLP), das für die Klassifizierung strukturierter Daten geeignet ist (z. B. den Iris-Datensatz oder die Hauspreisvorhersage):
aus tensorflow.keras importieren Ebenen und Modelle
def build_fnn_model(input_dim, num_classes):
model = models.Sequential([
# Eingabeebene und erste ausgeblendete Ebene
Schichten.Dense(64, Aktivierung='relu', input_shape=(input_dim,)),
#Zweite verborgene Ebene
Schichten.Dense(32, Aktivierung='relu'),
# Regularisierungsschicht (optional), um Überanpassung zu reduzieren
Schichten.Dropout(0.2),
# Ausgabeebene (Softmax wird für die Mehrfachklassifizierung verwendet und linear wird normalerweise für die Regression hinzugefügt)
Schichten.Dense(num_classes, Aktivierung='softmax')
])
Rückgabemodell
# Angenommen, es gibt 20 Eingabefunktionen und 3 Kategorien von Klassifizierungszielen
model = build_fnn_model(input_dim=20, num_classes=3)
model.summary()
Beim Kompilieren müssen Sie entsprechend dem Aufgabentyp eine geeignete Verlustfunktion (Verlustfunktion) auswählen:
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Execute training
# model.fit(x_train, y_train, epochs=50, batch_size=32, validation_split=0.2)
| Komponentenname | Häufig verwendete Einstellungen | Funktionsbeschreibung |
|---|---|---|
| Dicht (vollständig verbundene Schicht) | units=64 |
Verbinden Sie alle Neuronen in der vorherigen Ebene mit dieser Ebene, um nichtlineare Merkmalskombinationen zu lernen. |
| ReLU (Aktivierungsfunktion) | activation='relu' |
Die Lösung des Problems des verschwindenden Gradienten ist derzeit die am häufigsten verwendete Aktivierungsfunktion für verborgene Ebenen. |
| Softmax (Ausgabefunktion) | activation='softmax' |
Transformieren Sie die Ausgabe in eine Wahrscheinlichkeitsverteilung, sodass die Summe aller Klassenwahrscheinlichkeiten 1 ergibt. |
| Adam (Optimierer) | optimizer='adam' |
Algorithmen, die die Lernrate automatisch anpassen, können normalerweise eine schnellere und stabile Konvergenz erreichen. |
ValueError: Input 0 of layer dense is incompatible with the layer, bitte verwendentraceback.format_exc()Überprüfen Sie, ob die Form der Eingabedaten übereinstimmtinput_shapeDefinition.Das Convolutional Neural Network (CNN) besteht hauptsächlich aus einer Faltungsschicht (Convolutional Layer), einer Pooling-Schicht (Pooling Layer) und einer vollständig verbundenen Schicht (Dense Layer). Die Faltungsschicht ist für das Extrahieren räumlicher Bildmerkmale verantwortlich, die Pooling-Schicht ist für die Reduzierung der Datendimension verantwortlich und schließlich trifft die vollständig verbundene Schicht Klassifizierungsentscheidungen.
Verwenden Sie Folgendestf.keras.SequentialErstellen Sie ein klassisches CNN-Modell, das für Bildklassifizierungsaufgaben wie MNIST oder CIFAR-10 geeignet ist:
aus tensorflow.keras importieren Ebenen und Modelle
def build_cnn_model(input_shape, num_classes):
model = models.Sequential([
# Der erste Satz von Faltung und Pooling: Grundlegende Funktionen extrahieren
Schichten.Conv2D(32, (3, 3), Aktivierung='relu', input_shape=input_shape),
Schichten.MaxPooling2D((2, 2)),
# Der zweite Satz von Faltung und Pooling: Extrahieren von Merkmalen höherer Ordnung
Schichten.Conv2D(64, (3, 3), Aktivierung='relu'),
Schichten.MaxPooling2D((2, 2)),
# Der dritte Satz von Faltungen: Funktionen weiter stärken
Schichten.Conv2D(64, (3, 3), Aktivierung='relu'),
# Abflachung und vollständig verbundene Ebenen: Konvertieren Sie Feature-Maps in Klassifizierungsergebnisse
Schichten.Flatten(),
Schichten.Dense(64, Aktivierung='relu'),
Schichten.Dense(num_classes, Aktivierung='softmax')
])
Rückgabemodell
# Build the model (assuming the input image is 28x28 grayscale and the number of categories is 10)
model = build_cnn_model(input_shape=(28, 28, 1), num_classes=10)
model.summary()
Nach dem Erstellen des Modells müssen Sie den Optimierer, die Verlustfunktion und die Bewertungsindikatoren angeben. Bei Problemen mit mehreren Klassifizierungen wird es häufig verwendetAdamOptimierer undSparseCategoricalCrossentropy。
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# Gehen Sie davon aus, dass bereits vorbereitete Trainingsdaten x_train, y_train vorhanden sind
# model.fit(x_train, y_train, epochs=10, batch_size=64)
| Ebenenname | Beispiele für Schlüsselparameter | Hauptfunktion |
|---|---|---|
| Conv2D | filters=32, kernel_size=(3,3) |
Durch Faltungskerne und Bildoperationen werden lokale Merkmale wie Kanten und Texturen extrahiert. |
| MaxPooling2D | pool_size=(2,2) |
Wählen Sie den Maximalwert der Region und reduzieren Sie die Auflösung, um den Rechenaufwand zu reduzieren und eine Überanpassung zu vermeiden. |
| Flatten | keiner | Reduzieren Sie den mehrdimensionalen Tensor in einen eindimensionalen Vektor, um den endgültigen Klassifikator einzugeben. |
| Dense | units=10, activation='softmax' |
Ordnen Sie die extrahierten Features bestimmten Klassenwahrscheinlichkeiten zu. |
layers.Dropout(0.5)Dabei werden Neuronen nach dem Zufallsprinzip verworfen, um die Generalisierungsfähigkeit zu verbessern.tf.keras.layers.RandomFlipDie anderen Ebenen drehen oder spiegeln die Bilder während des Trainings automatisch, um die Probenvielfalt zu erhöhen.traceback.format_exc()Überprüfen Sie, ob die Tensor-Dimensionen (Shapes) nicht übereinstimmen oder nicht genügend Speicher (OOM) vorhanden ist.Recurrent Neural Network (RNN) wird speziell zur Verarbeitung verwendetSequenzdaten, wie Zeitreihen, Sprache oder natürliche Sprache. Im Gegensatz zu FNN verfügt RNN über die Fähigkeit zum „Speichern“. Die Neuronen in der verborgenen Schicht geben die aktuellen Informationen an den nächsten Zeitschritt (Zeitschritt) weiter und erfassen so die kontextbezogene Korrelation in den Daten.
In praktischen Anwendungen verwenden wir normalerweise, um das durch lange Sequenzen verursachte Problem des „verschwindenden Gradienten“ zu vermeidenLSTModerGRUSchichten. Im Folgenden wird ein einfaches LSTM-Modell zur Vorhersage von Zeitreihen (z. B. Aktienkursen oder Temperaturen) erstellt:
aus tensorflow.keras importieren Ebenen und Modelle
def build_rnn_model(Zeitschritte, Funktionen):
model = models.Sequential([
# LSTM-Ebene: erfordert 3D-Eingabe (Beispiele, Zeitschritte, Features)
Layers.LSTM(50, Aktivierung='relu', input_shape=(Zeitschritte, Features), return_sequences=True),
# Zweite Schicht LSTM: Wenn die Sequenz nicht zurückgegeben wird, return_sequences=False (Standard)
Schichten.LSTM(50, Aktivierung='relu'),
# Vollständig verbundene Ebene für die endgültige Ausgabe
Schichten.Dense(25),
Layers.Dense(1) # Vorausgesetzt, es handelt sich um ein Regressionsproblem, sagen Sie den nächsten Wert voraus
])
Rückgabemodell
# Gehen Sie davon aus, dass die Daten der letzten 10 Tage beobachtet werden und es 5 Features pro Tag gibt
model = build_rnn_model(timesteps=10, Features=5)
model.summary()
RNN-Schicht für EingabedatenShapeDie Anforderungen sind sehr streng und hier melden Anfänger am häufigsten Fehler:
| Dimensionsname | veranschaulichen | Beispiel |
|---|---|---|
| Samples | Die Gesamtzahl der Trainingsbeispiele. | 1000 Datensätze |
| Timesteps | Die Länge der Sequenz (Zeitfenster). | Beobachten Sie die letzten 30 Tage |
| Features | Die Anzahl der Features zu jedem Zeitpunkt. | Eröffnungskurs, Schlusskurs, Handelsvolumen |
| Ebenenname | Merkmale | Vorgeschlagene Szenarien |
|---|---|---|
| SimpleRNN | Die einfachste Struktur, schnelle Bedienung, aber extrem kurzer Speicher. | Sehr kurze Sequenzen oder einfache Muster. |
| LSTM | Es verfügt über einen Tormechanismus und kann ein Langzeitgedächtnis speichern. | Langtextverarbeitung, komplexe Zeitreihenvorhersage. |
| GRU | Eine vereinfachte Version von LSTM mit weniger Parametern und schnellerem Training. | Eine Alternative zu LSTM, wenn die Rechenressourcen begrenzt sind. |
clipnorm=1.0Kann die Stabilität erhöhen.return_sequences=True。Input 0 of layer lstm is incompatible with the layer, bitte passierentraceback.format_exc()prüfenX_train.shapeOb es sich tatsächlich um einen dreidimensionalen Tensor handelt.# Kompilierungsbeispiel
model.compile(optimizer='adam', loss='mean_squared_error')
Long Short-Term Memory (LSTM) ist eine spezielle Art von RNN, die ursprünglich entwickelt wurde, um das Problem des verschwindenden Gradienten zu lösen, das auftritt, wenn herkömmliche RNN lange Sequenzen verarbeiten. Es verwendet einen „Gate-Mechanismus“ (Vergessens-Gate, Eingabe-Gate, Ausgabe-Gate), um die Aufbewahrung und das Verwerfen von Informationen zu steuern und so langfristige Abhängigkeiten in Daten zu erfassen.
Im Folgenden wird ein zweischichtiges gestapeltes LSTM-Modell erstellt, das häufig zur Aktienpreisvorhersage, Stromlastvorhersage oder Analyse von Wettersensordaten verwendet wird:
aus tensorflow.keras importieren Ebenen und Modelle
def build_lstm_model(Zeitschritte, Funktionen):
model = models.Sequential([
# Erste Schicht LSTM: return_sequences=True muss gesetzt sein, um die Sequenz an die nächste Schicht zu übergeben
layers.LSTM(units=50, return_sequences=True, input_shape=(timesteps, Features)),
Layers.Dropout(0.2), # Überanpassung verhindern
# Zweite Schicht LSTM: Die letzte Schicht gibt normalerweise keine Sequenz zurück
layers.LSTM(units=50, return_sequences=False),
Schichten.Dropout(0.2),
# Vollständig verbundene Layer-Ausgabe
Layers.Dense(units=1) # Einen einzelnen Wert vorhersagen
])
model.compile(optimizer='adam', loss='mean_squared_error')
Rückgabemodell
# Beispiel: Beobachten Sie 60 Zeitpunkte in der Vergangenheit, jeder Punkt hat 1 Merkmal (z. B. Preis)
model = build_lstm_model(timesteps=60, Features=1)
model.summary()
Die Eingabe in LSTM muss ein dreidimensionaler Tensor sein(Samples, Timesteps, Features). Bevor die Daten in das Modell eingespeist werden, ist es oft notwendig, NumPy zur Konvertierung zu verwenden:
numpy als np importieren
# Nehmen Sie an, dass die Originaldaten eine eindimensionale Sequenz sind
Daten = np.random.rand(1000, 1)
# Konvertieren in (Anzahl der Proben, Zeitschritte, Anzahl der Features)
#Beispiel: 1 Vorhersage pro 60 Vorhersagen
X_train = []
für i im Bereich(60, 1000):
X_train.append(data[i-60:i, 0])
X_train = np.array(X_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
| Parametername | veranschaulichen |
|---|---|
| units | Die Anzahl der Neuronen in der verborgenen Schicht stellt die Speicherkapazität des Modells dar. |
| return_sequences | WennTrue, die gesamte Sequenz ausgeben; WennFalse, wird nur der letzte Zeitschritt ausgegeben. |
| input_shape | Das Format ist(Dauer, Anzahl der Features), beinhaltet nicht die Anzahl der Proben. |
| Dropout | Durch das zufällige Setzen einiger Einheiten auf 0 während des Trainings kann das Risiko einer Überanpassung des Modells wirksam verringert werden. |
expected ndim=3, found ndim=2Bitte überprüfen Sie, ob die Eingabedaten übergeben wurdenreshapeIn 3D konvertieren.MinMaxScalerSkalieren Sie die Daten zwischen 0 und 1.batch_sizeoder nutzentraceback.format_exc()Überprüfen Sie die konkrete Fehlerursache.Autoencoder ist einunbeaufsichtigtes LernenEin neuronales Netzwerk soll Eingabedaten in eine niedrigdimensionale Darstellung komprimieren (Kodierung) und daraus dann die Originaldaten rekonstruieren (Dekodierung). Es besteht im Wesentlichen aus zwei Teilen:
Im Folgenden wird die Keras Functional API verwendet, um einen grundlegenden Autoencoder für die Rauschunterdrückung oder Dimensionsreduzierung von Bildern zu erstellen:
aus tensorflow.keras importieren Ebenen und Modelle
#Legen Sie die Eingabegröße fest (angenommen, es handelt sich nach der Reduzierung um ein 28x28-Bild)
input_dim = 784
Encoding_dim = 32 #Komprimierte Feature-Dimension
# 1. Encoder definieren
input_img = Schichten.Input(shape=(input_dim,))
encoded = Layers.Dense(encoding_dim, activate='relu')(input_img)
# 2. Decoder definieren (Decoder)
dekodiert = Schichten.Dense(input_dim, Aktivierung='sigmoid')(kodiert)
# 3. Erstellen Sie ein Autoencoder-Modell (einschließlich der Eingabe zur rekonstruierten Ausgabe)
autoencoder = models.Model(input_img, dekodiert)
# 4. Erstellen Sie ein separates Encoder-Modell (zur Merkmalsextraktion)
Encoder = models.Model(input_img, encoded)
# 5. Kompilieren Sie das Modell (normalerweise unter Verwendung von MSE als Verlustfunktion).
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
| Anwendungstyp | Hauptzweck | Merkmale |
|---|---|---|
| Reduzierung der Datendimensionalität | PCA ersetzen | Kann nichtlineare charakteristische Beziehungen erfassen. |
| Bildrauschen (Entrauschen) | Bildrauschen entfernen | Geben Sie ein verrauschtes Bild ein und das Ziel ist das saubere Originalbild. |
| Anomalieerkennung | Erkennen Sie Kreditkartenbetrug und Geräteausfälle | Wenn der Rekonstruktionsfehler (Rekonstruktionsfehler) zu groß ist, handelt es sich um eine Anomalie. |
| Modell generieren | VAE (variativer Autoencoder) | Neues Material kann zufällig aus dem Codierungsraum generiert werden. |
Bei der Verarbeitung von Bildern ist es besser, Faltungsschichten zu verwenden. Encoder-NutzungConv2DUndMaxPooling2D, verwendet der DecoderUpSampling2DoderConv2DTranspose:
# Encoder-Teil
x = Schichten.Conv2D(16, (3, 3), Aktivierung='relu', padding='same')(input_img_2d)
x = Schichten.MaxPooling2D((2, 2), padding='same')(x)
#Decoder-Teil
x = Schichten.Conv2D(16, (3, 3), Aktivierung='relu', padding='same')(x)
x = Schichten.UpSampling2D((2, 2))(x)
dekodiert = Schichten.Conv2D(1, (3, 3), Aktivierung='sigmoid', padding='same')(x)
y_traindas heißtx_trainsich selbst, das heißtmodel.fit(x_train, x_train, ...)。encoding_dimZu klein, um die Dateneigenschaften vollständig zu erfassen.traceback.format_exc()Überprüfen Sie die Aktivierungsfunktion (z. B. sollte die Ausgabeschicht je nach Datenbereich sigmoid oder linear sein).Das Generative Adversarial Network (GAN) besteht aus zwei konkurrierenden neuronalen Netzen:
Beide entwickeln sich während des Trainings weiter: Der Generator lernt, realistischeres Material zu produzieren, während der Diskriminator lernt, ein schärferer Inspektor zu werden. Dieses dynamische Gleichgewicht ermöglicht es dem Generator letztendlich, hochwertige realistische Materialien zu erzeugen.
Das Folgende zeigt eine grundlegende GAN-Struktur zum Generieren von MNIST-ähnlichen handschriftlichen Ziffern:
Von tensorflow.keras importieren Sie Ebenen, Modelle und Optimierer
# 1. Generator definieren
def build_generator(latent_dim):
model = models.Sequential([
Schichten.Dense(128, input_dim=latent_dim),
Schichten.LeakyReLU(alpha=0.2),
Schichten.Dense(256),
Schichten.LeakyReLU(alpha=0.2),
Layers.Dense(784, Aktivierung='tanh') # Der Ausgabebereich liegt zwischen -1 und 1
])
Rückgabemodell
# 2. Definieren Sie den Diskriminator
def build_discriminator():
model = models.Sequential([
Schichten.Dense(256, input_dim=784),
Schichten.LeakyReLU(alpha=0.2),
Schichten.Dropout(0.3),
Schichten.Dense(1, Aktivierung='sigmoid') # Binäre Klassifizierung: wahr oder falsch
])
model.compile(loss='binary_crossentropy', optimierer=optimizers.Adam(0.0002, 0.5))
Rückgabemodell
# 3. Definieren Sie ein gegnerisches Netzwerk (Kombinationsmodell)
def build_gan(generator, diskriminator):
diskriminator.trainable = False # Korrigieren Sie den Diskriminator im kombinierten Modell
model = models.Sequential([generator, diskriminator])
model.compile(loss='binary_crossentropy', optimierer=optimizers.Adam(0.0002, 0.5))
Rückgabemodell
Das Training von GAN unterscheidet sich von dem allgemeiner Modelle. Es erfordert ein abwechselndes Training des Diskriminators und des Generators:
| Trainingsphase | Arbeitsschritte | Trainingsziele |
|---|---|---|
| Zugdiskriminator | Geben Sie halb echte Bilder und halb gefälschte Bilder ein und geben Sie ihnen Beschriftungen (1 und 0). | Maximieren Sie die Genauigkeit der Authentizitätserkennung. |
| Trainingsgenerator | Geben Sie zufälliges Rauschen über das gegnerische Netzwerk ein und setzen Sie alle Tags auf 1 (tun Sie so, als wären Sie das Original). | Minimiert die Wahrscheinlichkeit, dass der Diskriminator eine Fälschung erkennt. |
Bei der Verarbeitung von Bildern kann der Wechsel zu Faltungsschichten die Qualität der generierten Bilder erheblich verbessern. Der Generator wird verwendetConv2DTranspose(transponierte Faltung), um die Feature-Map zu vergrößern:
# Beispiel einer transponierten Faltungsschicht im Generator
model.add(layers.Conv2DTranspose(128, (4,4), strides=(2,2), padding='same'))
model.add(layers.LeakyReLU(alpha=0.2))
traceback.format_exc()Ausnahmen in Trainingsschleifen abfangen. Es wird empfohlen, die vom Generator erzeugten Bilder regelmäßig zu speichern, um die visuelle Entwicklung zu beobachten.Transformer ist eine Methode, die die traditionelle RNN-Schleifenstruktur aufgibt und vollständig darauf basiertAufmerksamkeitsmechanismusArchitektur. Sein Kern liegt in der „Multi-Head Self-Attention-Schicht“, die alle Positionen in der Sequenz gleichzeitig verarbeiten kann, das Problem der Fernabhängigkeit perfekt löst und den Eckpfeiler aktueller großer Modelle wie BERT und GPT darstellt.
In Keras kapseln wir normalerweise die Kerneinheit von Transformer in eine benutzerdefinierte Ebene oder Funktion. Ein Standard-Transformerblock umfasst Multi-Head-Aufmerksamkeit, Addition und Normalisierung (Add & Norm) sowie ein Feed-Forward-Netzwerk (Feed Forward).
aus Tensorflow Import Keras
aus tensorflow.keras Importebenen
def transformator_encoder(inputs, head_size, num_heads, ff_dim, dropout=0):
# 1. Mehrköpfige Selbstaufmerksamkeit
x = Schichten.MultiHeadAttention(
key_dim=head_size, num_heads=num_heads, dropout=dropout
)(Eingänge, Eingänge)
x = Schichten.Dropout(Dropout)(x)
res = x + inputs # Restverbindung
x = Schichten.LayerNormalization(epsilon=1e-6)(res)
# 2. Feed-Forward-Netzwerk
x_ff = Schichten.Dense(ff_dim, Aktivierung="relu")(x)
x_ff = Schichten.Dropout(Dropout)(x_ff)
x_ff = Layers.Dense(inputs.shape[-1])(x_ff)
x = x_ff + x # Restverbindung
Return-Layer.LayerNormalization(epsilon=1e-6)(x)
Im Folgenden wird gezeigt, wie Transformer auf Sequenzklassifizierungsaufgaben (z. B. Stimmungsanalyse oder Zeitreihenklassifizierung) angewendet wird:
def build_transformer_model(input_shape, head_size, num_heads, ff_dim, num_transformer_blocks, mlp_units, num_classes, dropout=0):
Eingaben = keras.Input(shape=input_shape)
x = Eingaben
# Stapeln Sie mehrere Transformer Encoder-Ebenen
für _ im Bereich(num_transformer_blocks):
x = transformator_encoder(x, head_size, num_heads, ff_dim, dropout)
#Globales Durchschnittspooling und endgültige Klassifizierungsschicht
x = Schichten.GlobalAveragePooling1D(data_format="channels_last")(x)
für dim in mlp_units:
x = Schichten.Dense(dim, Aktivierung="relu")(x)
x = Schichten.Dropout(Dropout)(x)
Ausgänge = Schichten.Dense(num_classes, Aktivierung="softmax")(x)
keras.Model zurückgeben (Eingaben, Ausgaben)
#Beispielparameter
model = build_transformer_model(
input_shape=(100, 64), # 100 Zeitpunkte, 64 Features an jedem Punkt
head_size=256,
num_heads=4,
ff_dim=4,
num_transformer_blocks=4,
mlp_units=[128],
num_classes=2,
Ausfall = 0,1
)
model.summary()
| Komponentenname | Funktionsbeschreibung |
|---|---|
| MultiHeadAttention | Berechnen Sie die Korrelationsstärke zwischen verschiedenen Positionen in der Sequenz, um Kontextinformationen zu erfassen. |
| Positional Encoding | Aufgrund der parallelen Verarbeitung von Transformer müssen zusätzliche Positionsinformationen hinzugefügt werden (normalerweise zur Eingabeebene hinzugefügt). |
| LayerNormalization | Stabilisiert die Aktivität von Neuronen und beschleunigt die Trainingskonvergenz, was sich von der in CNN üblicherweise verwendeten Batch-Norm unterscheidet. |
| Residual Connection | durchx + inputsErleichtern Sie die Ausbreitung von Farbverläufen und verhindern Sie eine tiefgreifende Verschlechterung des Netzwerks. |
Incompatible shapes, tritt normalerweise bei Restverbindungen auf. Bitte stellen Sie sicher, dass nach dem Durchlaufen der Aufmerksamkeitsschicht oder der dichten Schicht die Ausgabedimension mit der Eingabe übereinstimmtinputsVöllig stimmig.PyTorchEs handelt sich um ein Open-Source-Framework für maschinelles Lernen, das auf der Torch-Bibliothek basiert und hauptsächlich vom KI-Forschungsteam von Meta (ehemals Facebook) entwickelt wurde. Es wurde mit Blick auf Python entwickelt und legt Wert auf Flexibilität und Dynamik. Es hat sich zum beliebtesten Framework in akademischen Forschungskreisen entwickelt und wird in der Industrie häufig eingesetzt.
| Komponentenname | Hauptzweck |
|---|---|
| torch.nn | Enthält verschiedene neuronale Netzwerkschichten (z. B. Linear, Conv2d) und Verlustfunktionen. |
| torch.optim | Bietet Optimierungsalgorithmen wie SGD, Adam und RMSprop. |
| torch.utils.data | Laden von Prozessdaten, einschließlichDatasetUndDataLoader。 |
| torchvision | Ein speziell für Computer Vision entwickeltes Toolkit, einschließlich häufig verwendeter Datensätze, Modellarchitekturen und Bildkonvertierungen. |
Die Entwicklung eines Modells in PyTorch folgt normalerweise diesen Schritten:
DatasetKategorie und VerwendungDataLoaderFühren Sie eine Stapelverarbeitung durch.nn.Module,existieren__init__Definieren Sie die Ebene inforwardDefinieren Sie die Vorwärtsausbreitungslogik in .Das Folgende ist eine einfache Implementierung eines linearen Regressionsmodells:
Taschenlampe importieren
importiere Torch.nn als nn
# 1. Modellarchitektur definieren
Klasse LinearModel(nn.Module):
def __init__(self):
super(LinearModel, self).__init__()
self.linear = nn.Linear(1, 1) # Eingabe 1, Ausgabe 1
def vorwärts(selbst, x):
return self.linear(x)
model = LinearModel()
# 2. Verlustfunktion und Optimierer definieren
Kriterium = nn.MSELoss()
Optimizer = Torch.optim.SGD(model.parameters(), lr=0.01)
# 3. Trainingsschleife (vereinfachte Version)
# für Eingaben, Ziele im Datenlader:
# Ausgänge = Modell(Eingänge)
# Verlust = Kriterium (Ergebnisse, Ziele)
#optimierer.zero_grad()
#loss.backward()
#optimierer.step()
Klassifizieren Sie mehrere Sätze von Zeitreihendaten mithilfe des Klassifikatormodells der PyTorch-Architektur
Gehen Sie davon aus, dass es sich bei mehreren Sätzen von Zeitreihendaten um beschriftete Datensätze handelt, die unterschiedliche Klassifizierungsbezeichnungen enthalten. Wir müssen die Daten in etwas vorverarbeiten, das für PyTorch geeignet istDatasetUndDataLoaderFormat für Training und Tests.
import torch
from torch.utils.data import DataLoader, Dataset
# Gehen Sie davon aus, dass jeder Datensatz zu mehreren Zeitpunkten Merkmale aufweist
class TimeSeriesDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return torch.tensor(self.data[idx], dtype=torch.float32), torch.tensor(self.labels[idx], dtype=torch.long)
Hier ein einfachesLanges Kurzzeitgedächtnisnetzwerk (LSTM)Modell zur Verarbeitung von Zeitreihendaten und zur Klassifizierung der Endausgabe in mehrere Kategorien. Unten finden Sie ein Beispiel für ein einfaches LSTM-Modell.
import torch.nn as nn
class LSTMClassifier(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
super(LSTMClassifier, self).__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, num_classes)
def forward(self, x):
h0 = torch.zeros(num_layers, x.size(0), hidden_size).to(x.device)
c0 = torch.zeros(num_layers, x.size(0), hidden_size).to(x.device)
out, _ = self.lstm(x, (h0, c0))
out = self.fc(out[:, -1, :])
return out
Als nächstes legen Sie die Verlustfunktion und den Optimierer fest und geben die Daten zum Training in das Modell ein.
import torch.optim as optim
#Modellparameter
input_size = 10 #Anzahl der Features zu jedem Zeitpunkt
hidden_size = 64
num_layers = 2
num_classes = 3 #Anzahl der Klassifizierungskategorien
model = LSTMClassifier(input_size, hidden_size, num_layers, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# Trainingsschleife
for epoch in range(num_epochs):
for inputs, labels in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1}/{num_epochs}, Loss: {loss.item()}')
Bewerten Sie die Modellleistung anhand von Testdaten.
model.eval()
correct = 0
total = 0
with torch.no_grad():
for inputs, labels in test_loader:
outputs = model(inputs)
_, predicted = torch.max(outputs, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Testgenauigkeit: {100 * richtig / total:.2f}%')
Der Hauptgrund, warum Sie die GPU im Allgemeinen nicht aktivieren können, ist die von Ihnen installierte Version von PyTorch+cpuVersion.
Bevor Sie die GPU-fähige Version installieren, müssen Sie zunächst die vorhandene reine CPU-Version entfernen, um Bibliothekskonflikte zu vermeiden:
pip uninstall torch torchvision torchaudio
Wenn Ihre CUDA-Version 13.1 ist, müssen Sie den entsprechenden oder kompatiblen PyTorch-Befehl installieren. Bitte beachten Sie, dass PyTorch normalerweise mit einer bestimmten CUDA-Version kompiliert wird.
Bitte führen Sie den folgenden Befehl aus (installieren Sie PyTorch, das die neueste CUDA-Version unterstützt):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
Hinweis: Derzeit ist die offizielle stabile Version von PyTorch möglicherweise nicht vollständig mit cu131 getaggt, aber normalerweise können cu124 oder die neueste CUDA-kompilierte Version abwärtskompatibel mit dem 13.x-Treiber sein.
Sobald die Installation abgeschlossen ist, führen Sie Ihr Prüfskript erneut aus. Bei Erfolg sollten Sie die folgenden Ergebnisse sehen:
torch.cuda.is_available(): Truetorch.version.cuda: Angezeigt als12.4(oder die Version, die Sie installiert haben)transformersist eine leistungsstarke Suite, die von Hugging Face entwickelt wurde und für die Verarbeitung natürlicher Sprache (NLP) und andere maschinelle Lernaufgaben konzipiert ist. Es ermöglicht die bequeme Nutzung einer Vielzahl vorab trainierter Modelle, sodass Entwickler die fortschrittlichste Technologie mit minimalen Einstellungen nutzen können.
Kann mit pip installiert werdentransformersBausatz:
pip install transformers
Hier ist ein einfaches Beispiel für die Verwendung eines vorab trainierten Modells zur Textklassifizierung:
aus der Transformatoren-Importpipeline
# Stimmungsanalyse-Pipeline laden
Klassifikator = Pipeline("Sentiment-Analyse")
# Führen Sie eine Stimmungsanalyse durch
results = classifier("Das Transformers-Kit von Hugging Face ist großartig!")
drucken(Ergebnisse)
transformersDie Suite ist ein wichtiges Werkzeug für Entwickler und Forscher im NLP-Bereich. Seine umfangreiche Modellbibliothek und die benutzerfreundliche API machen es zur ersten Wahl für die Erstellung und Bereitstellung der fortschrittlichsten Anwendungen für maschinelles Lernen.
aus Transformatoren importieren AutoModelForCausalLM, AutoTokenizer
# Wählen Sie ein vorab trainiertes Modell aus, z. B. GPT-2
Modellname = „gpt2“
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# Eingabeaufforderung
prompt = „Vor langer Zeit, in einem fernen Land.“
#Konvertieren Sie die Eingabe in das Codierungsformat des Modells
input_ids = tokenizer.encode(prompt, return_tensors="pt")
# Verwenden Sie das Modell, um Text zu generieren
Ausgabe = model.generate(
input_ids,
max_length=50, # Die maximale Anzahl generierter Wörter
num_return_sequences=1, #Die Anzahl der zurückgegebenen Texte
Temperatur = 0,7, # Kontrollieren Sie die Vielfalt der Generation
top_k=50, # Begrenzt den Bereich der Kandidatenwörter
top_p=0.9, # Kernel-Sampling verwenden
do_sample=True # Sampling aktivieren, um eine abwechslungsreiche Ausgabe zu erzeugen
)
# Konvertieren Sie die generierte Kodierung zurück in Text
generierter_text = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_text)
prompt = „In der zukünftigen Ära der künstlichen Intelligenz“,
Ausgabe = model.generate(
tokenizer.encode(prompt, return_tensors="pt"),
max_length=100,
Temperatur=1,0,
top_p=0.95,
do_sample=True
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
prompt = „Die Hauptfunktion der künstlichen Intelligenz ist“
Ausgabe = model.generate(
tokenizer.encode(prompt, return_tensors="pt"),
max_length=50,
Temperatur=0,5,
do_sample=False # Deterministische Generierung verwenden
)
print(tokenizer.decode(output[0], skip_special_tokens=True))
Das obige Beispiel zeigt die VerwendungtransformersModell zur Textgenerierung. Je nach Bedarf können Sie Parameter anpassen, um abwechslungsreichen oder präzisen Text zu generieren, der sich für die kreative Erstellung, Vervollständigung technischer Dokumente und andere Szenarien eignet.
Umarmendes Gesicht verwendentransformersBei der Installation des Pakets werden die vorab trainierten Dateien des Modells und des Tokenizers heruntergeladen und im Standard-Cache-Verzeichnis gespeichert. Wenn Sie das Cache-Verzeichnis ändern müssen, können Sie es beim Laden des Modells oder Tokenizers angeben.cache_dirParameter.
aus Transformatoren importieren AutoModel, AutoTokenizer
# Benutzerdefiniertes Cache-Verzeichnis
cache_directory = "./my_custom_cache"
# Laden Sie das Modell und den Tokenizer und geben Sie das Cache-Verzeichnis an
model = AutoModel.from_pretrained("bert-base-uncased", cache_dir=cache_directory)
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased", cache_dir=cache_directory)
Sie können das globale Cache-Verzeichnis auch ändern, indem Sie Umgebungsvariablen festlegen, um sicherzustellen, dass alle Modelle und Tokenizer denselben Cache-Speicherort verwenden.
Betriebssystem importieren
aus Transformatoren importieren AutoModel, AutoTokenizer
# Globales Cache-Verzeichnis festlegen
os.environ["TRANSFORMERS_CACHE"] = "./my_global_cache"
# Modell und Tokenizer laden
model = AutoModel.from_pretrained("bert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
Um den Speicherort des Standard-Cache-Verzeichnisses zu überprüfen, können Sie den folgenden Code verwenden:
aus Transformers.utils importieren Sie default_cache_path
print("Standard-Cache-Verzeichnis:", default_cache_path)
durch Einstellungencache_diroder Umgebungsvariablen können Sie das Cache-Verzeichnis der Transformers-Suite einfach verwalten und so die Projektflexibilität und die Effizienz der Ressourcenverwaltung verbessern.
Die Modelle der meisten KI-Frameworks (z. B. Hugging Face Transformers) werden beim Herunterladen zur Wiederverwendung in voreingestellten Verzeichnissen gespeichert. Im Folgenden finden Sie voreingestellte Verzeichnisse für einige gängige Frameworks:
~/.cache/huggingface/transformers/~/.tensorflow_hub/~/.cache/torch/hub/Einige Modelldateien sind groß und erfordern einen gewissen Verwaltungsaufwand. Das Standard-Download-Verzeichnis kann über Umgebungsvariablen oder Programmparameter geändert werden. Hier sind einige spezifische Methoden:
durch UmgebungsvariablenHF_HOMEoderTRANSFORMERS_CACHEÜberarbeiten.
export HF_HOME=/your/custom/path
export TRANSFORMERS_CACHE=/your/custom/path
Oder geben Sie im Programm an:
from transformers import AutoModel
import os
os.environ["HF_HOME"] = "/your/custom/path"
os.environ["TRANSFORMERS_CACHE"] = "/your/custom/path"
model = AutoModel.from_pretrained("model-name")
Umgebungsvariablen festlegenTFHUB_CACHE_DIR:
export TFHUB_CACHE_DIR=/your/custom/path
Im Programm einstellen:
import os
os.environ["TFHUB_CACHE_DIR"] = "/your/custom/path"
Umgebungsvariablen festlegenTORCH_HOME:
export TORCH_HOME=/your/custom/path
Im Programm einstellen:
import os
os.environ["TORCH_HOME"] = "/your/custom/path"
Um zu bestätigen, ob das Modell in das angegebene Verzeichnis heruntergeladen wurde, können Sie den Verzeichnisinhalt überprüfen:
ls /your/custom/path
Oder drucken Sie das aktuelle Verzeichnis im Programm aus:
import os
print(os.environ.get("HF_HOME"))
print(os.environ.get("TRANSFORMERS_CACHE"))
Dateityp:Standard-Modelldatei „Umarmendes Gesicht“ (pytorch_model.bin), konvertiert in das FP16-Format.
verwenden:Im Vergleich zu FP32 reduziert FP16 den Speicherverbrauch und verbessert die Rechenleistung.
Nutzungssituation:Wird häufig für GPU-Inferenz mit PyTorch oder TensorFlow verwendet.
So speichern Sie als FP16:
aus Transformatoren importieren AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("model_name")
model.half() # In FP16-Format konvertieren
model.save_pretrained("./fp16_model")
Dateityp:Ähnlich wie FP16, jedoch mit besserer numerischer Stabilität konzipiert.
verwenden:Stabile Inferenz und Training auf BF16-fähigen GPUs wie NVIDIA A100, H100.
Anwendung:
model = AutoModelForCausalLM.from_pretrained("model_name", torch_dtype="torch.bfloat16").cuda()
Dateityp:INT8 quantisierte Hugging Face-Modelldatei.
verwenden:Reduziert die Speichernutzung erheblich bei minimalem Leistungsverlust.
So speichern Sie INT8-Modelle:
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("model_name", device_map="auto", load_in_8bit=True)
model.save_pretrained("./int8_model")
Dateityp: .onnx
verwenden:Plattformübergreifende GPU-Inferenz, unterstützt ONNX Runtime und TensorRT.
So konvertieren Sie zu ONNX:
pip install optimum[onnxruntime] optimum-cli export onnx --model=model_name ./onnx_model
ONNX-Inferenzbeispiel:
from onnxruntime import InferenceSession
session = InferenceSession("model.onnx", providers=["CUDAExecutionProvider"])
Dateityp: .engine
verwenden:NVIDIA-eigenes Format für leistungsstarke Inferenz, unterstützt FP16 und INT8.
Methode zur Konvertierung in TensorRT:
trtexec --onnx=model.onnx --saveEngine=model.engine --fp16
Beispiel für eine TensorRT-Inferenz:
import tensorrt as trt
TorchScript-Modell:Verwendung von PyTorch.ptFormat.
Beispiel speichern:
scripted_model = torch.jit.script(model)
scripted_model.save("model.pt")
| Format | Dateierweiterung | Optimierte Nutzung | rahmen |
|---|---|---|---|
| FP16 | .bin | Allzweck-GPU-Inferenz | PyTorch, TensorFlow |
| BF16 | .bin | numerische Stabilität | PyTorch, TensorFlow |
| INT8 | .bin | Wenig Speicher-GPU | Hugging Face + bitsandbytes |
| ONNX | .onnx | Plattformübergreifende GPU | ONNX Runtime, TensorRT |
| TensorRT | .engine | NVIDIA GPU | TensorRT |
GGML (General Graphical Model Layer) ist ein Modellformat für maschinelles Lernen, das für Hochleistungs- und Ressourcenszenarien entwickelt wurde. Sein Hauptzweck besteht darin, eine effiziente Speicherung und Inferenz von Modellen zu erreichen, insbesondere für Geräte mit eingeschränktem Speicher.
Schritte zum Konvertieren eines maschinellen Lernmodells in das GGML-Format:
pytorch_model.bin)。llama.cppKonvertierungsskript bereitgestellt.model.ggml.q4_0.bin。Llama (Large Language Model Meta AI) ist ein von Meta entwickeltes großes Sprachmodell, das für die Generierung von Text in natürlicher Sprache, die Beantwortung von Fragen und die Durchführung von Sprachverständnisaufgaben konzipiert ist.
Diese Modelle sind für ihre Effizienz bekannt und liefern qualitativ hochwertige Ergebnisse bei der Textgenerierung mit relativ wenigen Hardwareressourcen.
Erzeugung natürlicher Sprache:Wird zum Erstellen von Geschichten, Artikeln oder Gesprächen verwendet.
Frage- und Antwortsystem:Unterstützen Sie Benutzeranfragen und generieren Sie genaue Antworten.
Sprachübersetzung:Unterstützt Übersetzungsaufgaben zwischen mehreren Sprachen.
Sprachverständnis:Geeignet für Aufgaben wie Zusammenfassungen und Stimmungsanalysen.
Hohe Effizienz:Lama benötigt zum Trainieren weniger Ressourcen als andere große Modelle.
Offenheit:Meta unterstützt Forschung und kommerzielle Anwendungen und fördert die Entwicklung der Community.
Flexibilität:Modelle können auf einer Vielzahl von Hardwareplattformen ausgeführt werden, einschließlich CPUs und GPUs.
1. Installieren Sie die erforderlichen Tools:
pip install transformers pip install sentencepiece
2. Laden Sie das Modell:
aus Transformatoren importieren AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b").cuda()
input_text = „Was ist Lama?“
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.cuda()
Ausgabe = model.generate(input_ids, max_length=50)
print(tokenizer.decode(output[0]))
Llama bietet mehrere Versionen. Der Hauptunterschied liegt in der Anzahl der Parameter des Modells (z. B. 7B, 13B, 70B):
CPU:Für eine effiziente Inferenz kann das GGUF-Format verwendet werden.
GPU:Unterstützt das FP16- oder BF16-Format für verbesserte Leistung.
FP16-Quantifizierung:Reduzieren Sie die Speichernutzung und erhöhen Sie die Inferenzgeschwindigkeit.
INT8-Quantisierung:Geeignet für Geräte mit eingeschränkten Ressourcen, um Leistungsverluste zu reduzieren.
Mistral ist ein von Mistral AI entwickeltes, groß angelegtes Sprachmodell, das sich auf die Bereitstellung effizienter und genauer Funktionen zur Verarbeitung natürlicher Sprache konzentriert.
Das Modell ist für seine hochoptimierte Architektur und seinen optimierten Bedarf an Rechenressourcen bekannt und eignet sich daher für eine Vielzahl von Sprachgenerierungs- und Sprachverständnisaufgaben.
Effizienz:Mistral wurde mit der neuesten Transformer-Architektur entwickelt, um schnelle und genaue Argumentationsfunktionen bereitzustellen.
Offenheit:Das Mistral-Modell ist Open Source, sodass Benutzer es lokal ausführen und anpassen können.
Skalierbarkeit:Das Modell unterstützt mehrere Quantisierungsformate und ist für verschiedene Hardwareumgebungen geeignet.
Datenschutz:Kann in einer lokalen Umgebung bereitgestellt werden, um das Risiko von Datenlecks zu vermeiden.
Inhaltsgenerierung:Einschließlich Artikelschreiben, Gesprächsgenerierung und Texterstellung.
Sprachverständnis:Wird für Aufgaben wie Textklassifizierung und Stimmungsanalyse verwendet.
Bildungsanwendungen:Bieten Sie Unterrichtsunterstützung und beantworten Sie akademische Fragen.
Automatisierungssystem:Integrieren Sie es in Kundendienstsysteme oder andere automatisierte Prozesse.
1. Abhängigkeiten installieren:
pip install transformers
2. Laden Sie das Modell herunter:Laden Sie die Mistral-Modellarchive von Hugging Face oder anderen offiziellen Quellen herunter.
3. Laden Sie das Modell:
aus Transformatoren importieren AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B")
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B").cuda()
input_text = „Was ist Mistral?“
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.cuda()
Ausgabe = model.generate(input_ids, max_length=50)
print(tokenizer.decode(output[0]))
CPU:Unterstützt Hochleistungs-CPU-Inferenz und kann mithilfe des GGUF-Formats optimiert werden.
GPU:Unterstützt FP16- oder BF16-Formate für optimale Leistung auf NVIDIA-GPUs.
Mistral ist in mehreren Versionen erhältlich. Die Hauptunterschiede liegen in der Anzahl der Parameter und der Leistung:
Quantifizierungsformat:Verwenden Sie das INT8- oder GGUF-Format, um den Speicherbedarf zu reduzieren und die Inferenzeffizienz zu verbessern.
Leistungsoptimierung:Nutzen Sie Hardwarefunktionen wie den AVX-Befehlssatz oder die CUDA-Beschleunigung für effizientes Rechnen.
Gemma ist ein Open-Source-Sprachmodell in großem Maßstab, das für effiziente Verarbeitungsaufgaben natürlicher Sprache entwickelt wurde.
Mit seiner Vielseitigkeit und Skalierbarkeit im Kern unterstützt das Modell Textgenerierung, Sprachverständnis und Übersetzungsaufgaben in mehreren Sprachen.
Mehrsprachige Unterstützung:Gemma kann mehrere Sprachen verarbeiten und eignet sich daher für globale Anwendungsszenarien.
Leicht:Das Modell ist stark für ressourcenbeschränkte Hardware optimiert.
Skalierbarkeit:Unterstützt die Ausführung auf mehreren Hardwareumgebungen, einschließlich CPU und GPU.
Open Source:Open-Source-Code erleichtert Benutzern die Durchführung sekundärer Entwicklungen und Anpassungen.
Erzeugung natürlicher Sprache:Geeignet für die Erstellung von Inhalten, das Schreiben von Artikeln und die Generierung von Gesprächen.
Sprachverständnis:Einschließlich Aufgaben wie Stimmungsanalyse, Themenklassifizierung und Textzusammenfassung.
Maschinelle Übersetzung:Bieten Sie hochpräzise mehrsprachige Übersetzungsdienste an.
Bildung und Forschung:Als Lehrmittel oder Forschungsanalyseplattform.
1. Abhängigkeiten installieren:
pip install gemma
2. Laden Sie das Modell herunter:Laden Sie die entsprechende Gemma-Modelldatei von der offiziellen Website oder Modellbibliothek herunter.
3. Laden Sie das Modell:
aus Gemma importieren GemmaModel, GemmaTokenizer
#Tokenizer und Modell initialisieren
tokenizer = GemmaTokenizer.from_pretrained("gemma-ai/gemma-base")
model = GemmaModel.from_pretrained("gemma-ai/gemma-base").cuda()
# Bereiten Sie sich auf die Texteingabe vor
input_text = „Was ist Gemma?“
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.cuda()
# Ausgabe generieren
Ausgänge = model.generate(input_ids, max_length=50)
print(tokenizer.decode(outputs[0]))
Gemma bietet mehrere Versionen, um unterschiedliche Anforderungen zu erfüllen:
CPU:Unterstützt CPU-Inferenz und eignet sich für Umgebungen mit geringen Ressourcen.
GPU:Läuft auf CUDA-fähigen GPUs für hohe Leistung.
Quantitative Techniken:Unterstützt die Formate INT8 und FP16, reduziert den Speicherverbrauch und sorgt gleichzeitig für eine stabile Leistung.
Hardwareoptimierung:Nutzen Sie Hardwarefunktionen wie den AVX-Befehlssatz, um die Inferenz weiter zu beschleunigen.
GPT4All ist ein groß angelegtes Open-Source-Sprachmodell, das für die Verarbeitung natürlicher Sprache auf lokalen Geräten ohne Cloud-Abhängigkeiten entwickelt wurde.
Dieses Modell bietet effiziente Textgenerierungsfunktionen, eignet sich für mehrsprachige Anwendungsszenarien und ist für ressourcenarme Hardware konzipiert.
Open Source:GPT4All ist vollständig Open Source und kann an Ihre Bedürfnisse angepasst werden.
Lokal ausführen:Unterstützt die Ausführung auf PC, Laptop oder Server, keine Netzwerkverbindung erforderlich.
Leicht:Läuft auf der CPU und der GPU mit niedrigeren Spezifikationen, wodurch die Hardwareanforderungen reduziert werden.
Datenschutz:Da alle Vorgänge lokal ausgeführt werden, werden Benutzerdaten nicht an externe Server weitergegeben.
Inhaltserstellung:Verwenden Sie es zum Schreiben von Artikeln, Geschichten, Blogs oder technischen Dokumenten.
Frage- und Antwortsystem:Erstellen Sie einen Q&A-Assistenten, der offline funktioniert.
Pädagogische Unterstützung:Fungiert als Lern- und Problemlösungstool, um Benutzern das Verständnis komplexer Konzepte zu erleichtern.
Entwicklungshilfe:Wird zum Generieren von Code oder zum Bereitstellen von Vorschlägen für die Programmentwicklung verwendet.
1. Abhängigkeiten installieren:
pip install gpt4all
2. Laden Sie die Modelldatei herunter:Laden Sie das erforderliche Modellarchiv von der offiziellen GPT4All-Website herunter (z. B.binoder.ggufFormat).
3. Laden Sie das Modell:
aus gpt4all GPT4All importieren
model = GPT4All("gpt4all-lora-quantized.bin")
Antwort = model.generate("Hallo, was ist GPT4All?", max_tokens=100)
drucken (Antwort)
.bin:Gängiges quantisiertes Modellformat, geeignet für die meisten Geräte.
.gguf:Ein CPU-optimiertes Format, das für effiziente Inferenz auf Geräten mit geringen Ressourcen geeignet ist.
CPU:GPT4All unterstützt Hochleistungs-CPU-Inferenz und eignet sich für Umgebungen ohne GPU.
GPU:Wenn Sie über eine NVIDIA-GPU verfügen, können Sie zur Beschleunigung PyTorch oder andere Frameworks verwenden.
Quantitatives Modell:Verwenden Sie INT8 oder andere Quantisierungstechniken, um den Speicherverbrauch zu reduzieren.
Leistungsoptimierung:Nutzen Sie Hardwarefunktionen wie den AVX-Befehlssatz, um die Inferenz zu beschleunigen.
unnötig. GPT4All verlässt sich überhaupt nicht auf Torch (PyTorch) oder Tensorflow.
Python GPT4All
↓
C++-Backend (llama.cpp CPU-Version)
↓
.gguf-Modell
Wenn nur der Modelldateiname übergeben wird, wird er automatisch in den Cache-Ordner im Home-Verzeichnis des Benutzers heruntergeladen:
~/.cache/gpt4all/
from gpt4all import GPT4All
model = GPT4All(
"Meta-Llama-3-8B-Instruct.Q4_0.gguf",
model_path="D:/llm_models/gpt4all"
)
Nicht unterstützt. Die Python-API von GPT4All ist derzeit nur CPU-basiert.
Der folgende Fehler tritt auf:
TypeError: GPT4All.__init__() got an unexpected keyword argument 'n_gpu_layers'
Dies bedeutet, dass die aktuell installierte GPT4All-Python-Bindung keine GPU-bezogenen Parameter implementiert, was ein normales Verhalten ist.
import ollama
response = ollama.chat(
model="llama3:8b-instruct",
messages=[
{"role": "user", "content": "Explain CUDA in one sentence"}
]
)
print(response["message"]["content"])
Merkmal:
from llama_cpp import Llama
llm = Llama(
model_path="Meta-Llama-3-8B-Instruct.Q4_0.gguf",
n_gpu_layers=999,
n_ctx=4096
)
print(llm("Explain CUDA in one sentence")["choices"][0]["text"])
Merkmal:
Dies ist die gebräuchlichste und intuitivste Methode und eignet sich für Entwickler mit festen Remote-Servern (z. B. Firmen- oder Labor-Hosts).
Wenn eine einzelne GPU den Bedarf nicht decken kann oder Aufgaben dynamisch verschiedenen Knoten zugewiesen werden müssen, kann ein dediziertes verteiltes Framework verwendet werden.
Wenn Entwickler selbst nicht über Hardware-Ausrüstung verfügen, können sie On-Demand-Cloud-GPU-Ressourcen nutzen.
| planen | Durchführung |
|---|---|
| interaktive Plattform | Verwenden Sie Google Colab oder Kaggle Kernels, um kostenlose oder kostenpflichtige Remote-GPUs (wie T4, A100) direkt über den Browser zu erhalten. |
| Mietservice für Rechenleistung | Mieten Sie bestimmte GPU-Container über RunPod oder Lambda Labs und verwenden Sie Docker-Images, um Python-Ausführungsumgebungen schnell bereitzustellen. |
| Unternehmens-API | Verwenden Sie AWS SageMaker oder GCP Vertex AI, um Python-Skripte in Jobs zu kapseln und sie zur Ausführung an die Cloud zu senden. Das System weist GPU-Ressourcen automatisch zu und recycelt sie nach Abschluss des Vorgangs. |
Bei der Nutzung von Remote-Rechenleistung liegt der Engpass häufig eher in der Netzwerkübertragung als in der Berechnung selbst. Folgende Strategien werden empfohlen:
RayEs handelt sich um ein Open-Source-Framework für verteiltes Computing, das die einfache Skalierung von Python-Anwendungen von einer einzelnen Maschine auf einen großen Cluster ermöglicht. Es löst das Problem der begrenzten Einzelprozessorleistung in Python beim Umgang mit groß angelegtem maschinellem Lernen, Datenverarbeitung und Echtzeitinferenz.
Ray wandelt Standard-Python-Code durch einfache Dekoratoren in verteilte Aufgaben um:
@ray.remoteDefinierte asynchrone Funktion. Sie sind zustandslos und ideal für die parallele Bearbeitung unabhängiger Rechenaufgaben.@ray.remotedefinierte Kategorien. Sie sind zustandsbehaftet und können Daten zwischen mehreren Aufgaben beibehalten, wodurch sie für den Einsatz in Simulationsumgebungen oder für die Modellbereitstellung geeignet sind.Für Entwickler, die leistungsstarke Rechenleistung benötigen, bietet Ray eine äußerst einfache GPU-Planungsmethode. Sie müssen die Anzahl der CUDA-Geräte nicht manuell verwalten, geben Sie einfach die Ressourcenanforderungen an, wenn Sie die Remote-Aufgabe definieren:
@ray.remote(num_gpus=1)
def train_model(data):
# Ray weist diese Aufgabe automatisch Knoten mit inaktiven GPUs zu
# Und legen Sie die Umgebungsvariable CUDA_VISIBLE_DEVICES fest
Rückgabe „Training abgeschlossen“
Diese Abstraktion ermöglicht es Entwicklern, sich auf die Algorithmuslogik zu konzentrieren, ohne sich Gedanken über die Zuweisung und Wiederverwendung der zugrunde liegenden Hardwareressourcen machen zu müssen.
Ray ist mehr als nur eine Ausführungs-Engine, es enthält auch eine Reihe von Bibliotheken, die für KI-Workflows optimiert sind:
| Bibliotheksname | Hauptfunktionen |
|---|---|
| Ray Data | Laden und Umwandeln von Daten für groß angelegte Schulungen zum maschinellen Lernen, die die Streaming-Verarbeitung unterstützen. |
| Ray Train | Vereinfachen Sie das verteilte Modelltraining (unterstützt PyTorch, TensorFlow, Horovod usw.). |
| Ray Tune | Effizientes Hyperparameter-Optimierungs-Framework (Hyperparameter-Tuning). |
| Ray Serve | Wird zur Bereitstellung von Modellen für maschinelles Lernen mit automatischen Erweiterungs- und Lastausgleichsfunktionen verwendet. |
Rays größter Wert liegt daringeringe LatenzUndHoher DurchsatzEigenschaften. Im Vergleich zu herkömmlichen Aufgabenwarteschlangen (wie Celery) oder schwergewichtigen verteilten Frameworks (wie Spark) ähnelt die Syntax von Ray eher dem nativen Stil von Python und sein dynamischer Diagrammplanungsmechanismus kann äußerst komplexe und abhängige Rechenaufgaben bewältigen.
PyTorch RPC (Remote Procedure Call)Es handelt sich um ein verteiltes Trainingsframework, das offiziell von PyTorch bereitgestellt wird und komplexe Modelle unterstützt, die nicht einfach durch Datenparallelität (Datenparallelität) verarbeitet werden können. Es ermöglicht einem Knoten (Worker), eine Funktion auf einem anderen Remote-Knoten aufzurufen und das Ergebnis abzurufen oder wie eine lokale Funktion auf das Remote-Objekt zu verweisen.
| Methodenname | Ausführungsmerkmale |
|---|---|
rpc_sync
|
synchroner Aufruf. Nach dem Senden der Anforderung wird der aktuelle Ausführungsthread blockiert, bis das Antwortergebnis vom entfernten Ende empfangen wird. |
rpc_async
|
asynchroner Aufruf. Schicken Sie sofort eins zurückFutureObjekt, das Programm kann weiterhin andere Aufgaben ausführen und die Ergebnisse später abrufen. |
remote
|
Abgelegene Einrichtung. Erstellen Sie ein Objekt auf dem Remote-Knoten und geben Sie a zurückRRef, geeignet zum Erstellen eines Remote-Parameterservers (Parameterserver). |
PyTorch RPC eignet sich besonders für die folgenden Arten hochkomplexer verteilter Aufgaben:
Bei der Verwendung des RPC-Frameworks müssen Entwickler mit größeren Debugging-Schwierigkeiten konfrontiert werden als bei der allgemeinen Schulung. Da es sich um eine maschinenübergreifende Kommunikation handelt, werden Netzwerklatenz und Bandbreite häufig zu Leistungsengpässen. Darüber hinaus ist die Lebenszyklusverwaltung von Objekten (durch Referenzzählung von RRef) in einer verteilten Umgebung auch komplizierter, und es muss sichergestellt werden, dass entfernte Objekte ordnungsgemäß recycelt werden können, wenn sie nicht mehr benötigt werden.
email: [email protected]