Dr. Stefan Hackstein
stefan.hackstein@fhnw.ch
Abschlusstag: 12. Januar, Vormittags?
Strukturen in Daten finden
Lineare Regression
Lineare Regression
Output Layer
Hidden Layers
Input Layer
Weights * Inputs + Bias
Weights * Inputs + Bias
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Natural Language Processing: Übersetzungen, Chatbots
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Reinforcement Learning: Gaming, Robotik, Automatisierung
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Explainable AI: Transparenz, Vertrauen, Sicherheit
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Daten Erkunden
Modell & Trainingsloop erstellen
Evaluieren
Overfitten
Regularisieren
Optimieren
Case Study: Fragestellung
Report
Auch hilfreich: Lones: How to avoid machine learning pitfalls
Hands-On: MNIST Datensatz
Öffnen sie dieses Notebook und bearbeiten Sie die Aufgaben. Beantworten Sie so folgende Fragen:
Die Lösung finden Sie in diesem Notebook
Notebook auf Drive kopieren um Resultate zu speichern
Hands-On: MNIST Datensatz
Welche Daten enthält der Datensatz?
data.shape -> (N_data, size_input)
Die shape eines Datensatzes zeigt die Anzahl der Elemente (N_data) sowie das format der einzelnen Elemente (size_input)
Hands-On: MNIST Datensatz
Welches Format haben die Daten?
Die type(x) Funktion gibt die Klasse von x an
type(data[0]) -> class
Die built-in Funktion x.dtype gibt den Datentyp von x an
data.dtype -> data_type
Hands-On: MNIST Datensatz
Welche Klassen gibt es und wie sind diese verteilt?
numpy.unique(x) liefert eine liste aller Elemente die in x vorkommen
labels = np.unique(target)
numpy.bincount(x) liefert die Anzahl von Integerwerten in x, geordnet nach Zahlenwert der Integer
counts = np.bincount(target.astype(int))
Hands-On: MNIST Datensatz
Wie machen wir die Klassen dem Modell verständlich?
Um Stringlabel in für das Modell verständliche Floats zu verwandeln nutzen wir One-Hot-Encoding
# zB "3" -> [0,0,0,1,0,0,0,0,0,0]
#
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
labels = encoder.fit_transform(target)
Achtung: Die letzte Zeile erwartet hier target mit shape (N,1)
Hands-On: MNIST Datensatz
Welche Skalierung der Daten ist sinnvoll?
In den Knoten eines Neuronalen Netzes werden viele Werte aufsummiert, was zu sehr grossen Ergebnissen führen kann.
Ausserdem haben grundsätzilch hohe Features ein stärkeres Gewicht.
Um das zu verhindern werden die Input-Daten auf [-1,1] skaliert.
Dazu benutzt man idR das Min-Max scaling
scaled_data = (data - np.min(data)) / (np.max(data) - np.min(data)) * 2 - 1
Lernen mit Zieldaten (Label / Target)
Lernen ohne Zieldaten
Interaktion mit Umgebung
Architektur: Neuronale Netzstruktur
Neuronales Netz = einfache Dartstellung sehr komplizierter Rechnung
LinReg mit Basisfunktionen aus LinReg mit Basis aus Linreg mit Basis aus ...
Modell = Architektur mit Satz von Parametern
Layer = Level für Lineare Regression
Mehrere Knoten (Perceptronen)
Knoten = gewichtete Summe & Aktivierungsfunktion
Wofür Aktivierung?
Ohne Aktivierung: N Layer = 1 Layer
Lineare Kombination
von Linearkombinationen
ist eine Linearkombination
Nicht-Lineare Aktivierung
ermöglicht komplexe Modellierung
Wahl der Aktivierung:
Wahl der Aktivierung:
Dying ReLU:
Dying ReLU:
PReLU, RReLU, ELU, SELU, GELU, Swish, Mish, ReLU6, ...
nützlich bei sehr seltener Aktivierung
Pytorch | Tensorflow | |
---|---|---|
Eigenschaften | Pythonic, einfache Syntax schnelleres Training dynamischer Berenchnungsgraph höhere Flexibilität |
Skalierbar Speichereffizient statisch oder dynamisch |
Hauptanwendung | Forschung Prototyping |
Grossprojekte Produktion |
Community | Forschung | Industrie |
Pakete | TorchText, TorchVision, TorchAudio | TF Extended, TF Lite, TF Serving |
Beide Frameworks sehr nützlich & weit verbreitet
Mathematik identisch & Aufbau sehr ähnlich
Wahl meist durch Arbeitsumfeld bestimmt
Wenn möglich, bereits existierende Architektur / Modelle verwenden
from torch import nn
import torch.nn.functional as F
class Classifier(nn.Module):
def __init__(self):
super().__init__()
def forward(self, x):
return x
model = Classifier()
output = model(data)
Pytorch (Meta)
from torch import nn
import torch.nn.functional as F
class Classifier(nn.Module):
def __init__(self):
super().__init__()
self.fc4 = nn.Linear(784, 10)
def forward(self, x):
x = self.fc4(x)
return x
model = Classifier()
output = model(data)
Pytorch (Meta)
from torch import nn
import torch.nn.functional as F
class Classifier(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 64)
self.fc2 = nn.Linear(64, 64)
self.fc3 = nn.Linear(64, 64)
self.fc4 = nn.Linear(64, 10)
def forward(self, x):
x = self.fc1(x)
x = self.fc2(x)
x = self.fc3(x)
x = self.fc4(x)
return x
model = Classifier()
output = model(data)
Pytorch (Meta)
from torch import nn
import torch.nn.functional as F
class Classifier(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 64)
self.fc2 = nn.Linear(64, 64)
self.fc3 = nn.Linear(64, 64)
self.fc4 = nn.Linear(64, 10)
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = F.relu(self.fc3(x))
x = self.fc4(x)
return x
model = Classifier()
output = model(data)
Pytorch (Meta)
from torch import nn
import torch.nn.functional as F
class Classifier(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 64)
self.fc2 = nn.Linear(64, 64)
self.fc3 = nn.Linear(64, 64)
self.fc4 = nn.Linear(64, 10)
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = F.relu(self.fc3(x))
x = F.softmax(self.fc4(x), dim=1)
return x
model = Classifier()
output = model(data)
Pytorch (Meta)
from torch import nn
import torch.nn.functional as F
class Classifier(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 64)
self.fc2 = nn.Linear(64, 64)
self.fc3 = nn.Linear(64, 64)
self.fc4 = nn.Linear(64, 10)
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = F.relu(self.fc3(x))
x = F.softmax(self.fc4(x), dim=1)
return x
model = Classifier()
output = model(data)
Pytorch (Meta)
import tensorflow as tf
from tensorflow.keras import layers
class Classifier(tf.keras.Model):
def __init__(self):
super(Classifier, self).__init__()
self.fc1 = layers.Dense(64, activation='relu')
self.fc2 = layers.Dense(64, activation='relu')
self.fc3 = layers.Dense(64, activation='relu')
self.fc4 = layers.Dense(10, activation='softmax')
def call(self, x):
x = self.fc1(x)
x = self.fc2(x)
x = self.fc3(x)
x = self.fc4(x)
return x
model = Classifier()
model.build((None, 784))
model(data)
Tensorflow (Google)
import torch.nn as nn
model = nn.Sequential(
nn.Linear(784, 64),
nn.ReLU(),
nn.Linear(64, 64),
nn.ReLU(),
nn.Linear(64, 64),
nn.ReLU(),
nn.Linear(64, 10),
nn.Softmax(dim=1)
)
output = model(data)
Pytorch (Meta)
from tensorflow.keras import models
model = models.Sequential([
layers.Dense(64, activation='relu', input_shape=(784,)),
layers.Dense(64, activation='relu'),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
model(data)
Tensorflow (Google)
for images, labels in trainloader:
prediction = model(images)
loss = criterion(prediction, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
trainloader = DataLoader(trainset, batch_size=256, shuffle=True)
criterion = nn.CrossEntropyLoss()
Pytorch
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
Pytorch
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
for e in range(epochs):
Pytorch
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
for e in range(epochs):
for images, labels in trainloader:
Pytorch
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
for e in range(epochs):
for images, labels in trainloader:
prediction = model(images)
loss = criterion(prediction, labels)
Pytorch
Forward-Pass
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
for e in range(epochs):
for images, labels in trainloader:
prediction = model(images)
loss = criterion(prediction, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
Pytorch
Backward-Pass
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
for e in range(epochs):
running_loss = 0
for images, labels in trainloader:
prediction = model(images)
loss = criterion(prediction, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
running_loss += loss.item()
Pytorch
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
for e in range(epochs):
running_loss = 0
for images, labels in trainloader:
prediction = model(images)
loss = criterion(prediction, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
running_loss += loss.item()
Pytorch
model.compile(optimizer=optimizers.Adam(learning_rate=0.003),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
history = model.fit(train_images, train_labels, epochs=1, batch_size=64)
print(f'Training loss: {history.history["loss"][0]}')
Tensorflow
Ableitung der Kosten -> Richtung für Verbesserung -> Update
Gradient Descent
Lernrate
Ableitung der Kosten -> Richtung für Verbesserung -> Update
Gradient Descent
Ableitung der Kosten -> Richtung für Verbesserung -> Update
Gradient Descent
Ableitung der Kosten -> Richtung für Verbesserung -> Update
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Gradient Descent
Berechnet Ableitung
für jedes Update
mit gesamten Datensatz
folgt exakt steilstem Abstieg
Bei Millionen von Daten
sehr rechenintensiv...
Gradient Descent
Gradient Descent
Berechnet Ableitung
für jedes Update
mit gesamten Datensatz
folgt exakt steilstem Abstieg
Bei Millionen von Daten
sehr rechenintensiv...
Stochastic Gradient Descent (SGD)
Zerlegt Datensatz in Batches
Update nach jeder Batch
folgt Schätzung des steilsten Abstiegs
Forschritt kann Schwanken
Schnelle Konvergenz
dank schneller Rechnung
Gradient Descent
SGD
Momentum
Hands-On: MNIST Classifier
Bearbeiten Sie dieses Notebook
Die Lösung finden Sie in diesem Notebook
Wie gut und stabil ist mein Model?
from sklearn.metrics import confusion_matrix, f1_score
conf_mat = confusion_matrix(all_labels, all_preds)
f1 = f1_score(all_labels, all_preds, average='macro')
ImageNet Klassifikation
ImageNet Klassifikation
ImageNet Klassifikation
Hands-On: MNIST Classifier
Bearbeiten Sie dieses Notebook
Die Lösung finden Sie in diesem Notebook
Ist das Modell geeignet, Muster zu erkennen?
# Get one batch from the training_loader
images, labels = next(iter(training_loader))
# alternativ:
for images, labels in training_loader:
break
# Train the model on the batch for 100 iterations
for _ in range(100):
train(model, criterion, optimizer, [(images, labels)])
Ist das Modell geeignet, Muster zu erkennen?
Hands-On: MNIST Classifier
Bearbeiten Sie dieses Notebook
Die Lösung finden Sie in diesem Notebook
Text
Tiefes NN kann jede Funktion fitten
-> overfit leicht
-> Generalisierung schwer
Regularisierung reduziert Varianz,
ohne Bias zu erhöhen
-> Modell lernt "einfach" & robust zu sein
l1_regularization_loss = torch.norm(model.parameters(), 1)
l1_regularization_loss = torch.norm(model.parameters(), 1)
optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=beta)
l1_regularization_loss = torch.norm(model.parameters(), 1)
optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=beta)
nn.Dropout(0.2) # 0.2 of neurons set to 0
l1_regularization_loss = torch.norm(model.parameters(), 1)
optimizer = torch.optim.Adam(model.parameters(), lr=lr, weight_decay=beta)
nn.Dropout(0.2) # 0.2 of neurons set to 0
nn.BatchNorm1d()
PyTorch
Dense(N, kernel_regularizer=keras.regularizers.l2(beta), bias_regularizer=keras.regularizers.l2(beta))
tf.keras.layers.Dropout(0.2) # 0.2 of neurons set to 0
tf.keras.layers.BatchNormalization(),
Dense(N, kernel_regularizer=keras.regularizers.l1(beta), bias_regularizer=keras.regularizers.l1(beta))
TensorFlow
Hands-On: MNIST Classifier
Bearbeiten Sie dieses Notebook
Die Lösung finden Sie in diesem Notebook
Möglichkeiten & Grenzen
Möglichkeiten
Möglichkeiten
Möglichkeiten
Möglichkeiten
Möglichkeiten
Möglichkeiten
Möglichkeiten
Gefahren
Gefahren
Gefahren
Gefahren
Gefahren
Gefahren
Gefahren
Grenzen
Grenzen
Curse of Dimensionality
Abstände zwischen den Datenpunkten steigen exponentiell mit Dimension
Benötigte Anzahl Daten steigt Exponentiell mit Anzahl extrahierter Informationen
Grenzen
Grenzen
Grenzen
Grenzen
Grenzen
Modell auf unbekannten Daten optimieren
aber
Testset erst ganz zum Schluss verwenden
Modell auf unbekannten Daten optimieren
aber
Testset erst ganz zum Schluss verwenden
Weiteres Datenset absplitten
from torch.utils.data import random_split
train_ratio, valid_ratio = 0.8, 0.2
# Gesamteanzahl der Trainingsdaten
N_training = len(training_data)
# Berechne die Anzahl der Beispiele für jeden Split
train_size = int(train_ratio * N_training)
valid_size = N_training - train_size
# Teile den Trainingsdatensatz in Train und Valid auf
train_data, valid_data = random_split(training_data,
[train_size, valid_size])
from torch.utils.data import random_split
train_ratio, valid_ratio = 0.8, 0.2
# Gesamteanzahl der Trainingsdaten
N_training = len(training_data)
# Berechne die Anzahl der Beispiele für jeden Split
train_size = int(train_ratio * N_training)
valid_size = N_training - train_size
# Teile den Trainingsdatensatz in Train und Valid auf
train_data, valid_data = random_split(training_data,
[train_size, valid_size])
import tensorflow as tf
from sklearn.model_selection import train_test_split
valid_ratio = 0.2
input_data = your_input_data
labels = your_labels
input_train, input_valid, labels_train, labels_valid =
train_test_split(input_data, labels, test_size=valid_ratio, random_state=42)
# Create TensorFlow Datasets
train_dataset = tf.data.Dataset.from_tensor_slices((input_train, labels_train))
valid_dataset = tf.data.Dataset.from_tensor_slices((input_valid, labels_valid))
class MLP_var(nn.Module):
def __init__(self, N_layer: int):
super(MLP_var, self).__init__()
layers = []
layers.append(nn.Linear(28*28, 64))
layers.append(nn.ReLU())
for _ in range(N_layer-1):
layers.append(nn.Linear(64, 64))
layers.append(nn.ReLU())
layers.append(nn.Linear(64, 10))
self.model = nn.Sequential(*layers)
def forward(self, x):
x = x.view(x.size(0), -1)
x = self.model(x)
return x
Try different Values, pick best score
Try different Values, pick best score
Gridsearch
for (N_layer, lr) in product(N_layer_values, learning_rate_values):
model = MLP_var(N_layer)
model.to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=lr)
losses_train, losses_valid, f1_scores_train, f1_scores_valid = full_training(
model, criterion, optimizer, training_loader, valid_loader, epochs=epochs
)
Regularisierung
Hyperparameter
Tuning
Optimizer
Hyperparameter
Tuning
Optimizer
Regularisierung
Hands-On: MNIST Classifier
Bearbeiten Sie dieses Notebook
Die Lösung finden Sie in diesem Notebook
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Convolutional Neural Network (CNN)
Findet Strukturen
Convolutional Neural Network (CNN)
Klassifiziert durch Strukturen
Erstellen neue Daten wie Trainingsdaten
aus Zufalls-zahlen
Varational Autoencoder
Generative Adversarial Network
Varational Autoencoder
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Natural Language Processing: Übersetzungen, Chatbots
Sprachverarbeitung Wort für Wort
Wie in Kontext setzen?
RNN
Recurrent Neural Network (RNN)
Liest Satz Wort für Wort
Selbe Weights für jedes Wort
Liest Satz Wort für Wort
keine Parallelisierung
Transformer
Transformiert Sequenz zu neuer Sequenz
Attention layer lernt Kontext
als Stärke der Beziehung von Wörtern
Transformer
Transformer
Stacks von Encodern / Decodern
Erlaubt Parallelisierung
Transformer
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Reinforcement Learning: Gaming, Robotik, Automatisierung
Findet versprechendste Aktion in beliebigem Zustand
Hin und wieder neues ausprobieren
-> auf Veränderung reagieren
Hin und wieder neues ausprobieren
-> auf Veränderung reagieren
Früher: Tabelle
Heute:
Neuronales Netz
Computer Vision: Klassifizierung, Objekterkennung, Bildgenerierung
Natural Language Processing: Übersetzungen, Chatbots
Reinforcement Learning: Gaming, Robotik, Automatisierung
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Explainable AI: Transparenz, Vertrauen, Sicherheit
Zeitreihenanalyse: Markt- & Wetterprognosen, Anomalieerkennung
Kurzzeit-
Gedächtnis
Text
Langes
Kurzzeit-
Gedächtnis
Fully Connected (Dense) |
---|
Alle Neuronen verbunden |
Lineare Approximation |
Merkmale -> Klassifizierung |
Viele lernbare Parameter (In x Out) |
Hoher Rechenaufwand |
Fully Connected (Dense) | Pooling (Pool) |
---|---|
Alle Neuronen verbunden | Filtert informationen |
Lineare Approximation | Grössenreduktion |
Merkmale -> Klassifizierung | Robustere Modelle |
Viele lernbare Parameter (In x Out) | Keine Lernparameter |
Hoher Rechenaufwand | Geringer Rechenaufwand |
Fully Connected (Dense) | Pooling (Pool) | Convolutional (Conv) |
---|---|---|
Alle Neuronen verbunden | Filtert informationen | Gelernter Filter gleiteit über Daten |
Lineare Approximation | Grössenreduktion | Extrahiert lokale Merkmale |
Merkmale -> Klassifizierung | Robustere Modelle | Mustererkennung |
Viele lernbare Parameter (In x Out) | Keine Lernparameter | wenige lernbare Parameter |
Hoher Rechenaufwand | Geringer Rechenaufwand | Geringer Rechenaufwand |
Convolutional (Conv) | Pooling (Pool) | Fully Connected (Dense) |
---|---|---|
Extrahiert lokale Merkmale | Filtert informationen | Merkmale -> Klassifizierung |
wenige lernbare Parameter | Robustere Modelle |
Effizienteres Modell Translationsinvariant Bessere Generalisierung
Hands-On: TensorFlow CIFAR-10
Starten Sie mit diesem Notebook
Die Lösung finden Sie in diesem Notebook
Single Layer Perceptron
Multilayer Perceptron
Recurrent Neural Network (RNN)
Convolutional Neural Network (CNN)
Support Vector Machines
Autoencoder
AlexNet
GoogleNet
Generative Adversarial Network (GAN)
ResNet-18
Hands-On: Cifar-100 Classification
Starten Sie mit diesem Notebook
Hands-On: Audio Noise Reduction
Starten Sie mit diesem Notebook
Hands-On: Pytorch MNIST Anomaly Detection
Betrachten Sie dieses Notebook
Slurm: Umgang mit HPC Rechenclustern
Unterlagen auf Teams:
General > Class Materials > 20230710 - HowToSlurm.pdf
Bitte nehmen Sie sich einen Moment Zeit, um uns zu bewerten.