跳转到主要内容

可持续矩阵元素方法计算的深度学习实现

项目描述

DeepMEM

GitHub Project NSF Award Number

PyPI version Supported Python versions

pre-commit.ci status Code style: black

此存储库包含用于IRIS-HEP奖学金项目的代码: 可持续矩阵元素方法计算的深度学习实现


项目描述

矩阵元方法(MEM)是一种强大的统计分析技术,用于实验和模拟粒子物理数据。它比神经网络等黑盒方法具有多个优点,因为它具有透明和可解释的结果。然而,MEM的缺点是其执行过程中涉及的大量计算密集型计算,这阻碍了依赖它的研究。本项目旨在通过实施深度学习技术来提高MEM的可行性,以准确和高效地近似MEM计算 - 提供比传统方法所需的显著加速,同时保持其可解释性。所实现的模型可以在研究的探索阶段用作良好的近似,而完整的ME计算可以用于最终运行,从而使涉及MEM的研究工作流程更加高效。


安装

从PyPI

deepmemPyPI上发布,可以使用pip在Python虚拟环境中安装

$ python -m pip install deepmem

从版本控制

deepmem还可以通过克隆此存储库的版本并从存储库的顶层使用pip在Python虚拟环境中安装源代码

$ python -m pip install .

开发者可能想要创建一个可编辑的安装,这样他们的代码更改可以自动获取,而无需重新安装

$ python -m pip install --editable .

部署需求

代码在python 3.8.5中稳定。使用requirements.txt文件使用pip或所选的包安装程序安装依赖项。


输入解释

要运行此代码,只需使用所需的shell参数和输入文件修改运行deepmem

代码接受两种类型的输入

  • 通过JSON输入文件(例如:input_files/input.json):这是不需要动态用户更改的输入,即,在训练/优化阶段,这些将保持基本不变。
  • 通过shell参数(例如:deepmem --device=0):这些是在运行代码之前通常需要动态用户更改的输入。

示例:

查看input_files/input.json中的输入文件并修改数据的路径、保存和加载模型的路径等。然后运行以下代码以使用0号CUDA GPU对input_files/input.json中的选项进行50个epoch的训练

$ deepmem --device=0 --epochs=50 --mode=train

之后,运行以下代码再次使用input_files/input.json中的选项进行测试阶段,使用0号CUDA GPU进行推理

$ deepmem --device=0 --mode=test

它应在post/histogram.png(路径可以在输入文件中更改)中保存一个直方图,其中包含模型性能的视觉解释

shell参数解释:

$ deepmem --help
usage: deepmem [-h] [--loader LOADER] [--device DEVICE] [--epochs EPOCHS] [--inputfile INPUTFILE] [--mode MODE]

optional arguments:
  -h, --help            show this help message and exit
  --loader LOADER
  --device DEVICE
  --epochs EPOCHS
  --inputfile INPUTFILE
  --mode MODE           'train' or 'test'

在运行代码时将这些传递给deepmem

  1. --loader:[默认:hybridMT] 选择[内置、混合、混合MT]中的哪个dataloader实现。目前仅支持混合MT。它将所有数据加载到内存中,可以用于合理大小的数据集(在DGX上与约300k个事件一起舒适地工作)

  2. --device:[默认:None] 用于训练的编号cuda设备。使用None将选择CPU而不是GPU(不推荐)

  3. --epochs:[默认:10] 训练的epoch数

  4. --inputfile:[默认:input_files/input.json] 输入文件路径

  5. --mode:[默认:train] 是否以训练模式或测试模式运行

输入文件选项解释:

  • input_paths:[ 字符串列表 ] 包含输入(事件数据).root文件的路径

  • output_paths:[ 字符串列表 ] 包含与上述输入对应的输出(权重).root文件的路径

  • input_tree:[ 字符串 ] 指定要解析的输入文件中的哪个tree/directory

  • output_tree :   [ 字符串 ] 指定输出文件中要解析的树/目录

  • prefixes :   [ 字符串列表的列表 ] 包含在输入文件中要搜索的前缀。以下将进行进一步解释

  • suffixes :   [ 字符串列表的列表 ] 包含在输入文件中要搜索的后缀。以下将进行进一步解释

例如: 如果前缀是 [ ["lep1_"] , ["lep2_", "j1_"] , ["MET"] ] 并且后缀是 [ ["PT"] , ["PT", "Eta"] , ["", "_Phi"]],则数据加载器将从输入文件中加载以下变量 lep1_PT, "lep2_PT, lep2_Eta, j1_PT, j1_Eta, MET, MET_Phi。这基本上是来自同一索引列表中前缀和后缀的所有组合。

  • dir_name_processing :   [ 布尔值 ] [ 已弃用 ]对粒子名称字符串进行进一步处理(如果需要)以识别粒子目录。

  • weights :   [ 字符串列表 ] 指定与每个事件相关的权重所在的目录

  • batch_size :   [ 整数 ] 训练的批大小超参数。对 --loader=hybrid 和 --loader=hybridMT 有关

  • chunk_entries :   [ 整数 ] 指定一个加载块中的条目数。仅对 --loader=hybrid 有关 对 hybridMT 无关

  • shuffle :   [ 布尔值 ] 加载的数据是否需要打乱。对 --loader=hybrid 和 --loader=hybridMT 有关

  • split :   [ 3个整数的列表 ] 训练、验证和测试分割 目前请保持为 8,1,1,因为其他分割的稳定性仍在确定中

  • 学习率 :   [ 浮点数 ] 模型的初始学习率

  • save_lowest_loss_model_at :   [ 字符串 ] 在训练期间保存达到最低损失的模型的位置

  • save_scaler_at :   [ 字符串 ] 在训练期间保存对训练数据进行缩放拟合的位置

  • load_saved_model_from :   [ 字符串 ] 在测试阶段加载将使用的模型的位置

  • load_scaler_from :   [ 字符串 ] 在测试阶段加载将使用的缩放器的位置(应该是训练阶段保存的同一个缩放器)

  • save_testing_histogram_at :   [ 字符串 ] 保存最终输出直方图的位置

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

deepmem-0.0.1.tar.gz (17.5 kB 查看散列)

上传时间

构建分布

deepmem-0.0.1-py3-none-any.whl (16.4 kB 查看散列)

上传时间 Python 3