Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Tìm hiểu về TensorBoard với PyTorch
Trong bài viết này, mình sẽ tìm hiểu về TensorBoard và cách sử dụng nó để trực quan hóa và phân tích các mô hình học máy. TensorBoard là một công cụ hỗ trợ mạnh mẽ trong việc thực nghiệm học sâu, cung cấp các tính năng như:Trực quan hóa các giá trị tổn thất (loss) và độ chính xác (accuracy) trong quá trình huấn luyện.Hiển thị hình ảnh dữ liệu đầu vào.Thêm đồ thị mạng nơ-ron.Lập biểu đồ đường cong precision-recall để đánh giá kết quả dự đoán.
Hãy bắt đầu từng bước với mã nguồn minh họa được viết bằng PyTorch!
Cài đặt TensorBoard và các thư viện cần thiết trong PyTorch
Mã nguồn bắt đầu với việc khai báo các thư viện cần thiết:
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms import matplotlib.pyplot as plt from torch.utils.tensorboard import SummaryWriter import torch.nn.functional as F
Khởi tạo các tham số chính
- Cấu hình thiết bị: Sử dụng GPU nếu khả dụng, nếu không sử dụng CPU.
- Cài đặt siêu tham số: Kích thước đầu vào, số tầng ẩn, số lớp đầu ra, số epoch, kích thước batch, và learning rate.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') input_size = 784 # 28x28 pixel hidden_size = 500 num_classes = 10 num_epochs = 1 batch_size = 64 learning_rate = 0.001
Xử lý và tải dữ liệu MNIST
Sử dụng bộ dữ liệu MNIST, một bộ dữ liệu nổi tiếng gồm hình ảnh chữ số viết tay từ 0 đến 9, tải xuống tự động và biến đổi dữ liệu thành tensor.
Bài viết này được đăng tại [free tuts .net]
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True) test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor()) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)
Trực quan hóa hình ảnh bằng TensorBoard
Lấy một vài hình ảnh mẫu từ tập test và hiển thị:
examples = iter(test_loader) example_data, example_targets = examples.next()
Thêm lưới ảnh vào TensorBoard:
img_grid = torchvision.utils.make_grid(example_data) writer = SummaryWriter('runs/mnist1') # Đường dẫn lưu kết quả writer.add_image('mnist_images', img_grid)
Định nghĩa Mạng Nơ-ron
Xây dựng mạng nơ-ron đơn giản với một lớp ẩn và lớp fully connected cuối cùng:
class NeuralNet(nn.Module): def __init__(self, input_size, hidden_size, num_classes): super(NeuralNet, self).__init__() self.l1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.l2 = nn.Linear(hidden_size, num_classes) def forward(self, x): out = self.l1(x) out = self.relu(out) out = self.l2(out) return out
Huấn luyện mô hình và theo dõi loss, accuracy bằng TensorBoard
Kết hợp việc huấn luyện mạng nơ-ron và ghi nhận dữ liệu loss, accuracy sau mỗi bước huấn luyện:
for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): images = images.reshape(-1, 28*28).to(device) labels = labels.to(device) outputs = model(images) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() # Ghi nhận loss và accuracy cho TensorBoard running_loss += loss.item() _, predicted = torch.max(outputs, 1) running_correct += (predicted == labels).sum().item() if (i+1) % 100 == 0: writer.add_scalar('training loss', running_loss / 100, epoch * len(train_loader) + i) writer.add_scalar('accuracy', running_correct / 100, epoch * len(train_loader) + i) running_loss = 0.0 running_correct = 0