Ctrl/Cmd + P and select "Save as PDF".
import torch # From a Python list data = [[1, 2], [3, 4]] x = torch.tensor(data) # Tensors of ones, zeros, random ones = torch.ones(2, 3) zeros = torch.zeros(2, 3) rands = torch.rand(2, 3) # From NumPy import numpy as np np_array = np.array([1, 2, 3]) x_np = torch.from_numpy(np_array)
# Element-wise operations a = torch.tensor([1, 2, 3]) b = torch.tensor([4, 5, 6]) print(a + b) # tensor([5, 7, 9]) print(a * b) # tensor([4, 10, 18]) print(a ** 2) # tensor([1, 4, 9]) # Matrix multiplication A = torch.rand(2, 3) B = torch.rand(3, 4) C = A @ B # Shape: (2, 4)
x = torch.rand(3, 4) print(x.shape) # torch.Size([3, 4]) print(x.dtype) # torch.float32 print(x.device) # cpu or cuda:0
# Create tensors with gradient tracking w = torch.tensor(2.0, requires_grad=True) x = torch.tensor(3.0) # Forward pass builds the graph y = w * x # y = 2 * 3 = 6 # Backward pass computes gradients y.backward() # Gradient is dy/dw = x = 3 print(w.grad) # tensor(3.)
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.layer1 = nn.Linear(784, 128)
self.layer2 = nn.Linear(128, 64)
self.layer3 = nn.Linear(64, 10)
self.relu = nn.ReLU()
def forward(self, x):
x = self.relu(self.layer1(x))
x = self.relu(self.layer2(x))
x = self.layer3(x)
return xloss_fn = nn.MSELoss() loss = loss_fn(predictions, targets)
loss_fn = nn.CrossEntropyLoss() loss = loss_fn(logits, labels) # labels are class indices
import torch.optim as optim # SGD with momentum optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) # Adam (most popular) optimizer = optim.Adam(model.parameters(), lr=0.001)
# 1. Clear old gradients optimizer.zero_grad() # 2. Compute gradients via backpropagation loss.backward() # 3. Update weights optimizer.step()
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]from torchvision import datasets, transforms
# Define transformations
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
# Load FashionMNIST
train_data = datasets.FashionMNIST(
root='data', train=True, download=True,
transform=transform
)from torch.utils.data import DataLoader
train_loader = DataLoader(
train_data,
batch_size=64,
shuffle=True,
num_workers=4
)
# Iterate over batches
for images, labels in train_loader:
# images: (64, 1, 28, 28)
# labels: (64,)
passmodel = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
for epoch in range(10):
for images, labels in train_loader:
# Flatten images
images = images.view(images.size(0), -1)
# Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# Backward pass & update
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')model.eval()
correct = 0
total = 0
with torch.no_grad():
for images, labels in test_loader:
images = images.view(images.size(0), -1)
outputs = model(images)
# Get predictions
_, predicted = torch.max(outputs, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f'Test Accuracy: {accuracy:.2f}%')# Check CUDA availability
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(f'Using device: {device}')
# Move model to GPU
model = SimpleNet().to(device)
# Move data to GPU in training loop
for images, labels in train_loader:
images = images.to(device)
labels = labels.to(device)
# ... rest of training# Save entire model (not recommended)
torch.save(model, 'model.pth')
# Save only state dict (recommended)
torch.save(model.state_dict(), 'model_weights.pth')
# Save checkpoint (for resuming training)
checkpoint = {
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}
torch.save(checkpoint, 'checkpoint.pth')# Load state dict
model = SimpleNet()
model.load_state_dict(torch.load('model_weights.pth'))
model.eval()
# Load checkpoint
checkpoint = torch.load('checkpoint.pth')
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']