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})
注意事项
- SQLite 文件会自动创建,但 CSV 文件的目录需要存在
- 表名和列名会自动清理,移除特殊字符
- 自动时间戳使用 ISO 格式
- CSV 后端依赖 pandas,确保已安装
许可证
MIT License
贡献
欢迎提交 Issue 和 Pull Request!
更新日志
v0.1.0
- 初始版本
- 支持 SQLite 和 CSV 后端
- 自动从 argparse 生成表结构
- 基本的 CRUD 操作
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1c08b8201b785db64847558ced27ca89edb032ec422a149d81ee35ad8b4b73d
|
|
| MD5 |
53e890b175121e8317d16e455cf03d4d
|
|
| BLAKE2b-256 |
ca869ceaf85e059a7ed404724f543919fd00d9b5c2004d37d5da4cf8c5d634ec
|
Provenance
The following attestation bundles were made for arglogger-0.1.1.tar.gz:
Publisher:
python-publish.yml on MinsGoing/arglogger
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arglogger-0.1.1.tar.gz -
Subject digest:
c1c08b8201b785db64847558ced27ca89edb032ec422a149d81ee35ad8b4b73d - Sigstore transparency entry: 537201104
- Sigstore integration time:
-
Permalink:
MinsGoing/arglogger@4560a9cdc484430ce9ab5ba9104e42e88c6173cf -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/MinsGoing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@4560a9cdc484430ce9ab5ba9104e42e88c6173cf -
Trigger Event:
release
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
771be6594eb340090f13d2a2753fc7f2d0386bdd2c603a9c1919f0074bd634f9
|
|
| MD5 |
cd193438a63ba7c20c03c7145678c3e0
|
|
| BLAKE2b-256 |
70c8b07b0a128f7cc4359e559c13ed1e19a07c564e312e6422406c3843b158e4
|
Provenance
The following attestation bundles were made for arglogger-0.1.1-py3-none-any.whl:
Publisher:
python-publish.yml on MinsGoing/arglogger
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arglogger-0.1.1-py3-none-any.whl -
Subject digest:
771be6594eb340090f13d2a2753fc7f2d0386bdd2c603a9c1919f0074bd634f9 - Sigstore transparency entry: 537201124
- Sigstore integration time:
-
Permalink:
MinsGoing/arglogger@4560a9cdc484430ce9ab5ba9104e42e88c6173cf -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/MinsGoing
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@4560a9cdc484430ce9ab5ba9104e42e88c6173cf -
Trigger Event:
release
-
Statement type: