python打卡第36天
- 进度条功能:手动和自动写法,让打印结果更加美观
import time
from tqdm import tqdm, trangedef progress_bar_demo(total_iterations=100):"""展示手动和自动进度条实现"""print("\n=== 手动进度条实现 ===")# 手动实现进度条def manual_progress_bar(iterations):start_time = time.time()for i in range(iterations):# 模拟处理任务time.sleep(0.02)# 计算进度百分比percent = (i + 1) / iterations * 100# 创建进度条可视化bar_length = 40filled_length = int(bar_length * (i + 1) // iterations)bar = '█' * filled_length + '-' * (bar_length - filled_length)# 计算耗时elapsed_time = time.time() - start_time# 打印进度信息print(f'\r进度: |{bar}| {percent:.1f}% 耗时: {elapsed_time:.2f}s', end='')print("\n任务完成!")manual_progress_bar(total_iterations)print("\n=== 自动进度条实现 (使用tqdm) ===")# 使用tqdm自动进度条def auto_progress_bar(iterations):# 使用tqdm创建进度条for _ in tqdm(range(iterations), desc="处理进度", ncols=80, bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}]"):# 模拟处理任务time.sleep(0.02)auto_progress_bar(total_iterations)print("\n=== 数据处理进度条示例 ===")# 实际数据处理场景示例data = [f"样本_{i}" for i in range(50)]# 使用tqdm包装数据迭代器processed_data = []for item in tqdm(data, desc="处理数据"):# 模拟数据处理time.sleep(0.1)processed_data.append(item.upper())print(f"\n处理完成! 共处理 {len(processed_data)} 条数据")# 运行进度条演示
progress_bar_demo()
- 推理的写法:评估模式
-
import torch from torch.utils.data import DataLoader, TensorDataset import numpy as npdef inference_demo():"""展示推理评估模式的标准写法"""# 1. 创建模拟数据print("\n=== 创建测试数据 ===")num_samples = 1000input_size = 10X_test = torch.randn(num_samples, input_size)y_test = torch.randint(0, 2, (num_samples,))test_dataset = TensorDataset(X_test, y_test)test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)print(f"测试集: {len(test_loader.dataset)} 个样本, {len(test_loader)} 个批次")# 2. 创建简单模型class SimpleModel(torch.nn.Module):def __init__(self, input_size):super().__init__()self.fc1 = torch.nn.Linear(input_size, 20)self.fc2 = torch.nn.Linear(20, 2)def forward(self, x):x = torch.relu(self.fc1(x))x = self.fc2(x)return xmodel = SimpleModel(input_size)# 3. 推理函数def run_inference(model, data_loader):# 确保模型在评估模式model.eval()# 禁用梯度计算with torch.no_grad():all_preds = []all_labels = []# 使用tqdm添加进度条for inputs, labels in tqdm(data_loader, desc="推理进度", total=len(data_loader),ncols=80):# 前向传播outputs = model(inputs)# 获取预测结果_, preds = torch.max(outputs, 1)# 收集结果all_preds.extend(preds.cpu().numpy())all_labels.extend(labels.cpu().numpy())return np.array(all_preds), np.array(all_labels)# 4. 运行推理print("\n=== 开始推理 ===")predictions, true_labels = run_inference(model, test_loader)# 5. 计算评估指标accuracy = (predictions == true_labels).mean()print(f"\n推理完成! 准确率: {accuracy:.4f}")# 6. 推理后注意事项print("\n注意: 推理完成后,如果需要继续训练,请调用 model.train() 切换回训练模式")# 运行推理演示 inference_demo()
@浙大疏锦行