进度条功能:手动和自动写法,让打印结果更加美观
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()

1238

被折叠的 条评论
为什么被折叠?



