PyTorch

Deep Learning Framework - dynamische Graphen, GPU-Beschleunigung, torchvision, produktionsreif

TL;DR

Was: Ein Open-Source Machine-Learning-Framework basierend auf Python.

Warum: Dynamische Berechnungsgraphen, Pythonische API, starke Research-Community, produktionsreif.

Quick Start

Installieren:

pip install torch torchvision

Hello PyTorch:

import torch

# Create tensors
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = x + y
print(z)  # tensor([5, 7, 9])

# Check GPU
print(torch.cuda.is_available())

Cheatsheet

OperationCode
Tensor erstellentorch.tensor([1, 2, 3])
Nullen/Einsentorch.zeros(3, 3)
Zufälligtorch.rand(3, 3)
Formx.shape
Umformenx.view(2, 3)
Zur GPUx.to('cuda')
Gradientx.requires_grad_(True)

Gotchas

Neuronales Netzwerk

import torch.nn as nn

class SimpleNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.relu(self.fc1(x))
        return self.fc2(x)

model = SimpleNN()

Trainingsschleife

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(epochs):
    for inputs, labels in dataloader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

GPU-Nutzung

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)
inputs = inputs.to(device)

Speichern und Laden

# Save
torch.save(model.state_dict(), 'model.pth')

# Load
model.load_state_dict(torch.load('model.pth'))
model.eval()

Next Steps