可持续矩阵元素方法计算的深度学习实现
项目描述
DeepMEM
此存储库包含用于IRIS-HEP奖学金项目的代码: 可持续矩阵元素方法计算的深度学习实现。
项目描述
矩阵元方法(MEM)是一种强大的统计分析技术,用于实验和模拟粒子物理数据。它比神经网络等黑盒方法具有多个优点,因为它具有透明和可解释的结果。然而,MEM的缺点是其执行过程中涉及的大量计算密集型计算,这阻碍了依赖它的研究。本项目旨在通过实施深度学习技术来提高MEM的可行性,以准确和高效地近似MEM计算 - 提供比传统方法所需的显著加速,同时保持其可解释性。所实现的模型可以在研究的探索阶段用作良好的近似,而完整的ME计算可以用于最终运行,从而使涉及MEM的研究工作流程更加高效。
安装
从PyPI
deepmem
在PyPI上发布,可以使用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
-
--loader:[默认:hybridMT] 选择[内置、混合、混合MT]中的哪个dataloader实现。目前仅支持混合MT。它将所有数据加载到内存中,可以用于合理大小的数据集(在DGX上与约300k个事件一起舒适地工作)
-
--device:[默认:None] 用于训练的编号cuda设备。使用
None
将选择CPU而不是GPU(不推荐) -
--epochs:[默认:10] 训练的epoch数
-
--inputfile:[默认:input_files/input.json] 输入文件路径
-
--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 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 108938bd0a67ffcee5fedea206ca11f5065b4b232f543480618a72e3962c72e4 |
|
MD5 | d36933aa8ff63a2a840b5f07b23d3d4c |
|
BLAKE2b-256 | bcd2cd4d89f4460253de3d1da05ab23c2b9b065d465360d3f3ca5f4315a5845f |