import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.tensorboard import SummaryWriter
# 简单的线性模型
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc = nn.Linear(1, 1)
def forward(self, x):
return self.fc(x)
# 数据生成
def generate_data():
x = torch.linspace(-1, 1, 100).unsqueeze(1) # 输入特征
y = 2 * x + 1 + 0.2 * torch.randn_like(x) # 目标带噪声
return x, y
# 设置
model = SimpleModel()
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 创建 TensorBoard 的 SummaryWriter
writer = SummaryWriter(log_dir="/root/tf-logs")
# 数据
x_train, y_train = generate_data()
# 训练过程
for epoch in range(100):
model.train()
# 前向传播
y_pred = model(x_train)
loss = criterion(y_pred, y_train)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 将损失写入 TensorBoard
writer.add_scalar('Loss/train', loss.item(), epoch)
# 可视化模型权重和偏置
for name, param in model.named_parameters():
writer.add_histogram(f'{name}_grad', param.grad, epoch)
writer.add_histogram(f'{name}_data', param.data, epoch)
# 打印训练信息
if (epoch + 1) % 10 == 0:
print(f"Epoch [{epoch + 1}/100], Loss: {loss.item():.4f}")
# 保存模型并记录到 TensorBoard
torch.save(model.state_dict(), "simple_model.pth")
writer.add_text("Model", "Model training complete and saved.")
writer.close()
print("训练完成!使用 `tensorboard --logdir=runs` 启动 TensorBoard 查看结果。")
测试效果
