第三十六天打卡

@浙大疏锦行

进度条功能:手动和自动写法,让打印结果更加美观

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()

推理的写法:评估模式

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()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值