开发机中使用tensorboard
更新时间:2025-12-22
本文将介绍如何在百舸开发机中安装并使用Tensorboard工具。
环境准备
端口配置
为了确保能够在公网环境访问Tensorboard服务,需要配置自定义端口,将服务暴露到公网:
Tensorboard安装
通过pip install来安装Tensorboard
Plain Text
1pip install tensorboard
Tensorboard日志准备
首先需要确保Tensorboard日志已经存在于开发机目录中,若无可用日志,可通过如下脚本快速生成。该示例脚本通过随机数据生成包括标量、直方图、图像、文本、计算图、PR曲线和嵌入数据等多种数据类型的Tensorboard日志。
Plain Text
1import torch
2import torch.nn as nn
3import numpy as np
4from torch.utils.tensorboard import SummaryWriter
5import datetime
6
7# Set random seeds
8torch.manual_seed(42)
9np.random.seed(42)
10
11# Create TensorBoard writer
12log_dir = "logs/random_demo/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
13writer = SummaryWriter(log_dir)
14
15# 1. Scalar data - Simulating training metrics
16for step in range(100):
17 # Simulate loss decreasing
18 loss = 2.0 * np.exp(-step / 20) + np.random.rand() * 0.2
19 # Simulate accuracy increasing
20 accuracy = 0.3 + 0.7 * (1 - np.exp(-step / 30)) + np.random.rand() * 0.05
21
22 writer.add_scalar('Loss/train', loss, step)
23 writer.add_scalar('Accuracy/train', accuracy, step)
24
25 # Add more scalars
26 writer.add_scalar('Learning_rate', 0.001 * np.exp(-step / 50), step)
27 writer.add_scalar('Batch_time', 0.1 + np.random.rand() * 0.05, step)
28
29# 2. Histogram data - Simulating weight distributions
30for step in range(0, 100, 20):
31 # Simulate neural network weights
32 weights = torch.randn(1000) * (1.0 - step/100)
33 biases = torch.randn(100) * 0.1
34 gradients = torch.randn(500) * 0.01
35
36 writer.add_histogram('weights/layer1', weights, step)
37 writer.add_histogram('biases/layer1', biases, step)
38 writer.add_histogram('gradients', gradients, step)
39
40# 3. Image data - Random images
41for step in range(0, 100, 25):
42 # Generate random RGB images (3, 32, 32)
43 random_images = torch.rand(8, 3, 32, 32) # 8 images, 3 channels, 32x32
44 writer.add_images('Random_images', random_images, step)
45
46 # Generate random grayscale images
47 gray_images = torch.rand(8, 1, 28, 28)
48 writer.add_images('MNIST_like_images', gray_images, step)
49
50# 4. Text data - Example text
51sample_text = """
52This is a TensorBoard demonstration log.
53Generated using PyTorch with random data.
54Includes various data types: scalars, histograms, images, text, etc.
55"""
56writer.add_text('Experiment_Info', sample_text, 0)
57writer.add_text('Hyperparameters',
58 f"Batch size: 64\nLearning rate: 0.001\nOptimizer: Adam", 0)
59
60# 5. Computation graph - Simple model structure
61class SimpleModel(nn.Module):
62 def __init__(self):
63 super(SimpleModel, self).__init__()
64 self.fc1 = nn.Linear(10, 20)
65 self.fc2 = nn.Linear(20, 5)
66
67 def forward(self, x):
68 x = torch.relu(self.fc1(x))
69 x = self.fc2(x)
70 return x
71
72model = SimpleModel()
73dummy_input = torch.rand(1, 10)
74writer.add_graph(model, dummy_input)
75
76# 6. PR curve (Precision-Recall Curve)
77num_samples = 1000
78probabilities = torch.rand(num_samples)
79labels = torch.randint(0, 2, (num_samples,)).float()
80writer.add_pr_curve('Binary_Classification', labels, probabilities, 0)
81
82# 7. Embedding data - High-dimensional data visualization
83num_embeddings = 100
84embedding_dim = 16
85features = torch.randn(num_embeddings, embedding_dim)
86metadata = [f'class_{i%5}' for i in range(num_embeddings)]
87
88writer.add_embedding(features, metadata=metadata,
89 tag='Random_embeddings', global_step=0)
90
91# 8. Audio data - Random audio
92try:
93 sample_rate = 44100
94 audio_data = torch.rand(1, sample_rate) * 2 - 1 # Normalize to [-1, 1]
95 writer.add_audio('Random_audio', audio_data, 0, sample_rate=sample_rate)
96
97 t = torch.linspace(0, 1, sample_rate)
98 sine_wave = 0.3 * torch.sin(2 * np.pi * 440 * t) # 440Hz A tone
99 writer.add_audio('Sine_wave_440Hz', sine_wave.unsqueeze(0), 0, sample_rate=sample_rate)
100except Exception as e:
101 print(f"Audio generation skipped: {e}")
102
103# 9. Scalar groups
104for step in range(50):
105 writer.add_scalars('Losses', {
106 'train_loss': 1.0 / (step + 1),
107 'val_loss': 1.5 / (step + 1),
108 'test_loss': 2.0 / (step + 1)
109 }, step)
110
111 writer.add_scalars('Accuracies', {
112 'train_acc': min(0.95, 0.5 + step * 0.01),
113 'val_acc': min(0.92, 0.5 + step * 0.009),
114 'test_acc': min(0.90, 0.5 + step * 0.008)
115 }, step)
116
117# 10. Custom scalar layout
118layout = {
119 'Training': {
120 'Loss': ['Multiline', ['Loss/train', 'Loss/validation']],
121 'Accuracy': ['Multiline', ['Accuracy/train', 'Accuracy/validation']]
122 },
123 'Distributions': {
124 'Weights': ['Multiline', ['weights/layer1']]
125 }
126}
127writer.add_custom_scalars(layout)
128
129# Close the writer
130writer.close()
131
132print(f"TensorBoard logs generated to: {log_dir}")
启动Tensorboard
执行如下命令启动tensorboard服务,并指定端口和日志路径:
Plain Text
1tensorboard --logdir={log_folder} --host=0.0.0.0 --port={tensorboard服务内部端口}
然后浏览器访问 http://{开发机公网IP}:{BLB监听端口}/ 即可打开
