知识点回顾:
- 三种不同的模型可视化方法:推荐torchinfo打印summary+权重分布可视化
- 进度条功能:手动和自动写法,让打印结果更加美观
- 推理的写法:评估模式
作业:调整模型定义时的超参数,对比下效果。
1. 模型可视化方法
①使用torchinfo打印summary
from torchinfo import summarymodel = SimpleNN()
summary(model, input_size=(1, 784)) # 输入尺寸
②权重分布可视化
import matplotlib.pyplot as plt# 可视化第一层权重
plt.hist(model.fc1.weight.data.numpy().flatten(), bins=50)
plt.title('FC1 Weight Distribution')
plt.show()
2. 进度条功能
①手动写法
from tqdm import tqdmfor epoch in range(10):with tqdm(train_loader, desc=f'Epoch {epoch}') as pbar:for data, target in pbar:# ...训练代码...pbar.set_postfix(loss=loss.item())
②自动写法
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter()
for epoch in range(10):for i, (data, target) in enumerate(train_loader):# ...训练代码...writer.add_scalar('Loss/train', loss.item(), epoch*len(train_loader)+i)
③推理写法
model.eval() # 切换到评估模式
with torch.no_grad(): # 禁用梯度计算correct = 0for data, target in test_loader:output = model(data)pred = output.argmax(dim=1)correct += (pred == target).sum().item()accuracy = correct / len(test_loader.dataset)print(f'Test Accuracy: {accuracy:.2%}')
作业:超参数调整对比
1.模型定义示例(带超参数)
class SimpleNN(nn.Module):def __init__(self, hidden_size=128, dropout_rate=0.2):super(SimpleNN, self).__init__()self.fc1 = nn.Linear(784, hidden_size)self.dropout = nn.Dropout(dropout_rate)self.fc2 = nn.Linear(hidden_size, 10)def forward(self, x):x = x.view(-1, 784)x = F.relu(self.fc1(x))x = self.dropout(x)x = self.fc2(x)return x
2.超参数对比实验
hidden_sizes = [64, 128, 256]
dropout_rates = [0.0, 0.2, 0.5]for h_size in hidden_sizes:for d_rate in dropout_rates:model = SimpleNN(hidden_size=h_size, dropout_rate=d_rate)# ...训练和评估代码...print(f'Hidden: {h_size}, Dropout: {d_rate}, Acc: {accuracy:.2%}')
关键点:
1. 评估时一定要用 model.eval() 和 torch.no_grad()
2. 进度条推荐使用tqdm或tensorboard
3. 超参数调整要系统性地对比(如网格搜索)
4. 可视化有助于理解模型行为