python打卡第36天

  1. 进度条功能:手动和自动写法,让打印结果更加美观
import time
from tqdm import tqdm, trange

def 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 = 40
            filled_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()
  1. 推理的写法:评估模式
  2. import torch
    from torch.utils.data import DataLoader, TensorDataset
    import numpy as np
    
    def inference_demo():
        """展示推理评估模式的标准写法"""
        
        # 1. 创建模拟数据
        print("\n=== 创建测试数据 ===")
        num_samples = 1000
        input_size = 10
        X_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 x
        
        model = 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()

    @浙大疏锦行

你可能感兴趣的:(python打卡,python,开发语言)