Skip to main content

A package for logging experiment results with automatic table generation from argparse configurations

Project description

ArgLogger

一个用于记录机器学习实验的 Python 包,可以根据 argparse 配置自动创建数据库表或 CSV 文件,方便保存和管理实验结果。

特性

  • 🚀 自动化: 从 argparse 配置自动生成表结构
  • 💾 多后端支持: 支持 SQLite 数据库和 CSV 文件存储
  • 🔄 灵活操作: 支持增删改查操作
  • 时间戳: 自动添加创建和更新时间
  • 🎯 类型推断: 智能推断数据类型
  • 📊 易于统计: 便于后续的结果分析和统计

安装

pip install arglogger

或者从源码安装:

git clone https://github.com/MinsGoing/arglogger.git
cd arglogger
pip install -e .

快速开始

基本用法

import argparse
from arglogger import ArgLogger

# 创建 argparse parser
parser = argparse.ArgumentParser()
parser.add_argument('--learning_rate', type=float, default=0.001)
parser.add_argument('--batch_size', type=int, default=32)
parser.add_argument('--epochs', type=int, default=100)
parser.add_argument('--model', type=str, default='resnet50')

# 解析参数(这里是示例参数)
args = parser.parse_args(['--learning_rate', '0.01', '--batch_size', '64'])

# 创建实验记录器
logger = ArgLogger(
    experiment_name='my_experiment',
    backend='sqlite',  # 或者 'csv'
    parser=parser  # 或者传入 args=args
)

# 记录实验结果
logger.log_result({
    'learning_rate': args.learning_rate,
    'batch_size': args.batch_size,
    'epochs': args.epochs,
    'model': args.model,
    'accuracy': 0.95,
    'loss': 0.05
})

# 获取所有结果
results = logger.get_results()
print(results)

# 关闭连接
logger.close()

使用 CSV 后端

from arglogger import ArgLogger

# 使用 CSV 文件存储
logger = ArgLogger(
    experiment_name='csv_experiment',
    backend='csv',
    storage_path='experiments/results.csv',
    args=args
)

# 记录结果
logger.log_result({
    'accuracy': 0.92,
    'precision': 0.88,
    'recall': 0.90,
    'f1_score': 0.89
})

完整的实验脚本示例

import argparse
from arglogger import ArgLogger

def train_model(args):
    """模拟训练过程"""
    # 这里是你的训练代码
    accuracy = 0.95  # 假设的结果
    loss = 0.05
    return accuracy, loss

def main():
    # 设置参数
    parser = argparse.ArgumentParser(description='Machine Learning Experiment')
    parser.add_argument('--learning_rate', type=float, default=0.001)
    parser.add_argument('--batch_size', type=int, default=32)
    parser.add_argument('--epochs', type=int, default=100)
    parser.add_argument('--model', type=str, default='resnet50')
    parser.add_argument('--optimizer', type=str, default='adam')
    parser.add_argument('--dataset', type=str, default='cifar10')
    
    args = parser.parse_args()
    
    # 创建实验记录器
    logger = ArgLogger(
        experiment_name='ml_experiments',
        backend='sqlite',
        storage_path='experiments.db',
        args=args
    )
    
    # 训练模型
    accuracy, loss = train_model(args)
    
    # 记录结果
    logger.log_result({
        'learning_rate': args.learning_rate,
        'batch_size': args.batch_size,
        'epochs': args.epochs,
        'model': args.model,
        'optimizer': args.optimizer,
        'dataset': args.dataset,
        'accuracy': accuracy,
        'loss': loss,
        'notes': f'Experiment with {args.model} on {args.dataset}'
    })
    
    print(f'Experiment logged: Accuracy={accuracy:.4f}, Loss={loss:.4f}')
    
    # 查看历史结果
    results = logger.get_results(limit=5)
    print(f'\\nLast 5 experiments:')
    for result in results:
        print(f'ID: {result["id"]}, Model: {result["model"]}, Accuracy: {result["accuracy"]:.4f}')
    
    logger.close()

if __name__ == '__main__':
    main()

高级功能

更新和删除结果

# 更新结果
logger.update_result(
    condition={'id': 1},  # 条件
    updates={'accuracy': 0.96, 'notes': 'Updated accuracy'}  # 更新内容
)

# 删除结果
logger.delete_results(condition={'id': 1})

动态添加列

# 添加新列
logger.add_column('validation_accuracy', 'REAL')

# 记录包含新列的结果
logger.log_result({
    'accuracy': 0.95,
    'validation_accuracy': 0.92
})

查看表结构

# 获取当前表结构
schema = logger.get_schema()
print(schema)

API 文档

ArgLogger 类

构造函数

ArgLogger(
    experiment_name: str,
    backend: str = 'sqlite',
    storage_path: Optional[str] = None,
    parser: Optional[argparse.ArgumentParser] = None,
    args: Optional[argparse.Namespace] = None,
    auto_timestamp: bool = True
)

参数:

  • experiment_name: 实验名称(用作表名或文件名)
  • backend: 存储后端,'sqlite' 或 'csv'
  • storage_path: 存储路径(可选,默认使用实验名称)
  • parser: ArgumentParser 实例(用于自动提取表结构)
  • args: 解析后的参数对象(用于自动提取表结构)
  • auto_timestamp: 是否自动添加时间戳列

主要方法

  • log_result(results: Dict[str, Any], **kwargs): 记录实验结果
  • get_results(limit: Optional[int] = None): 获取实验结果
  • update_result(condition: Dict[str, Any], updates: Dict[str, Any]): 更新结果
  • delete_results(condition: Dict[str, Any]): 删除结果
  • add_column(column_name: str, column_type: str): 添加列
  • get_schema(): 获取当前表结构
  • close(): 关闭连接

支持的数据类型

  • INTEGER: 整数
  • REAL: 浮点数
  • TEXT: 字符串
  • BOOLEAN: 布尔值

复杂类型(如列表、字典)会自动序列化为 JSON 字符串存储。

示例场景

1. 机器学习模型比较

models = ['resnet50', 'vgg16', 'mobilenet']
learning_rates = [0.001, 0.01, 0.1]

for model in models:
    for lr in learning_rates:
        # 训练模型
        accuracy = train_model(model, lr)
        
        # 记录结果
        logger.log_result({
            'model': model,
            'learning_rate': lr,
            'accuracy': accuracy
        })

2. 超参数搜索

import itertools

# 定义超参数空间
param_grid = {
    'batch_size': [16, 32, 64],
    'learning_rate': [0.001, 0.01],
    'dropout': [0.2, 0.5]
}

# 网格搜索
for params in itertools.product(*param_grid.values()):
    param_dict = dict(zip(param_grid.keys(), params))
    
    # 训练和评估
    results = train_and_evaluate(**param_dict)
    
    # 记录结果
    logger.log_result({**param_dict, **results})

注意事项

  1. SQLite 文件会自动创建,但 CSV 文件的目录需要存在
  2. 表名和列名会自动清理,移除特殊字符
  3. 自动时间戳使用 ISO 格式
  4. CSV 后端依赖 pandas,确保已安装

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

更新日志

v0.1.0

  • 初始版本
  • 支持 SQLite 和 CSV 后端
  • 自动从 argparse 生成表结构
  • 基本的 CRUD 操作

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

arglogger-0.1.1.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

arglogger-0.1.1-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file arglogger-0.1.1.tar.gz.

File metadata

  • Download URL: arglogger-0.1.1.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for arglogger-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c1c08b8201b785db64847558ced27ca89edb032ec422a149d81ee35ad8b4b73d
MD5 53e890b175121e8317d16e455cf03d4d
BLAKE2b-256 ca869ceaf85e059a7ed404724f543919fd00d9b5c2004d37d5da4cf8c5d634ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for arglogger-0.1.1.tar.gz:

Publisher: python-publish.yml on MinsGoing/arglogger

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arglogger-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: arglogger-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for arglogger-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 771be6594eb340090f13d2a2753fc7f2d0386bdd2c603a9c1919f0074bd634f9
MD5 cd193438a63ba7c20c03c7145678c3e0
BLAKE2b-256 70c8b07b0a128f7cc4359e559c13ed1e19a07c564e312e6422406c3843b158e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for arglogger-0.1.1-py3-none-any.whl:

Publisher: python-publish.yml on MinsGoing/arglogger

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page