ShopTRAINING/test/test_training_with_encoding.py
2025-07-02 11:05:23 +08:00

122 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
训练测试 - 正确的编码配置
测试训练器是否正常输出日志保留所有中文和emoji字符
"""
import os
import sys
import subprocess
def setup_encoding():
"""设置正确的UTF-8编码环境"""
os.environ['PYTHONIOENCODING'] = 'utf-8'
os.environ['PYTHONLEGACYWINDOWSSTDIO'] = '0'
# Windows控制台编码设置
if os.name == 'nt':
try:
# 设置控制台代码页为UTF-8
subprocess.run(['chcp', '65001'],
capture_output=True,
shell=True,
check=False)
# 重新配置标准输出
if hasattr(sys.stdout, 'reconfigure'):
sys.stdout.reconfigure(encoding='utf-8', errors='replace')
sys.stderr.reconfigure(encoding='utf-8', errors='replace')
except Exception as e:
print(f"警告:编码设置失败: {e}")
def test_direct_training():
"""测试直接训练功能"""
print("=" * 60)
print("🧪 训练日志输出测试开始")
print("💡 目标: 验证训练器控制台输出是否正常")
print("📋 策略: 保留所有中文和emoji通过编码配置解决乱码")
print("=" * 60)
# 添加server路径
current_dir = os.path.dirname(os.path.abspath(__file__))
server_dir = os.path.join(current_dir, 'server')
sys.path.insert(0, server_dir)
try:
print("📦 正在导入训练器模块...")
from trainers.transformer_trainer import train_product_model_with_transformer
print("✅ 训练器模块导入成功")
print("\n🚀 开始训练测试")
print("📊 产品ID: P001")
print("🤖 模型类型: Transformer")
print("⚙️ 训练轮次: 2 (快速测试)")
print("🎯 期望: 看到详细的训练进度输出")
print("-" * 60)
# 调用训练器 - 应该能正常显示所有中文和emoji
result = train_product_model_with_transformer(
product_id='P001',
epochs=2,
training_mode='product'
)
print("-" * 60)
print("🎉 训练测试完成!")
if result:
model, metrics, version = result
print(f"📊 返回结果:")
print(f" 模型对象: {type(model).__name__}")
print(f" 模型版本: {version}")
if metrics:
print(f" 训练指标:")
for key, value in metrics.items():
if isinstance(value, float):
print(f" {key}: {value:.4f}")
else:
print(f" {key}: {value}")
else:
print(" ⚠️ 训练指标为空")
print("✅ 训练成功完成,返回了完整结果")
else:
print("❌ 训练返回None可能存在问题")
except Exception as e:
print(f"❌ 训练过程发生错误: {e}")
print("\n🔍 错误详情:")
import traceback
traceback.print_exc()
# 提供解决建议
print("\n💡 可能的解决方案:")
print("1. 确认数据文件存在: pharmacy_sales_multi_store.csv")
print("2. 检查编码环境变量: PYTHONIOENCODING=utf-8")
print("3. 使用批处理文件启动: .\\启动API服务器.bat")
print("\n" + "=" * 60)
print("🏁 训练日志输出测试结束")
print("💬 如果看到了包含emoji和中文的训练进度说明编码配置成功")
print("📝 重要: 本次测试保留了所有原始中文和emoji字符")
print("=" * 60)
def main():
"""主函数"""
# 设置编码环境
setup_encoding()
print("🔧 编码环境配置:")
print(f" PYTHONIOENCODING: {os.environ.get('PYTHONIOENCODING', '未设置')}")
print(f" PYTHONLEGACYWINDOWSSTDIO: {os.environ.get('PYTHONLEGACYWINDOWSSTDIO', '未设置')}")
print(f" 系统平台: {os.name}")
print()
# 运行训练测试
test_direct_training()
if __name__ == "__main__":
main()