计算化学和凝聚态物理的机器学习工具

cmlkit的Python项目详细描述


cmlkit

“骆驼工具包”

_______________

PyPI - Python VersionPyPICode style: black

cmlkit为计算化学和凝聚态物理的机器学习模型,特别是原子论预测的机器学习模型的指定、调整和评估提供了一种简洁明了的方法。

警告:

  • cmlkit依赖于^{},这是尚未公开的。
  • 这是一个“科学准则”,即发展很少发生,而且有点偶然。我会尽量不做太多突破性的改变,永远不要在小版本。
  • 这是一个非常特定于领域的项目,所以它有点充满了行话。但是,tuneengine子模块非常通用!

如果你在任何科学工作中使用此代码,请在出版物中提及并告知我。谢谢!

什么是cmlkit?_;

在其核心,cmlkit定义了一个统一的基于dict的格式来指定模型组件,这些组件可以直接读写为yaml。它使用这种格式为其域中流行方法的实现提供接口。模型组件被实现为纯粹的ish函数,这在概念上是令人满意的,并为轻松的管道和缓存打开了大门。

在此基础上,它实现了并行超参数优化(使用hyperopt作为后端),并提供工具来训练模型、进行预测和评估这些预测。它的目的是扩展性和灵活性足以满足研究的需要。它还具有“高性能计算兼容性”,即它可以直接在90年代的计算环境中运行。

出于必要性,它还实现了另一种数据集格式,但通过提供自动加载来弥补这一点,这是很好的。

兼容性

目前,有以下接口:

表示:

  • 多体张量表示(mbtr)(hou,rupp,arxiv 1704.06439(2017))(qmmlpack接口)
  • 原子位置的平滑重叠(soap)表示(bartok,kondor,csanyi,prb 87 184115(2013))(quippy接口)
  • 对称函数(SF)表示(Behler,JCP 134074106(2011))(^{}接口)

回归方法:

  • ^{}
  • 中实现的内核岭回归(krr)

功能

  • 相当干净、可组合、现代的代码库,几乎没有魔力

超参数优化(cmlkit.tune)自夸:

  • 强大的多核支持(即它可以自动终止超时的外部代码,即使它忽略了SIGTERM
  • 不需要mongodb(对于某些计算环境courk很重要courk
  • 扩展到hyperopt空间(log网格)
  • 实现多步骤优化的可能性(目前处于试验阶段)
  • 可恢复/可恢复运行由可读的、原子式编写的优化历史(由^{}支持)
  • 搜索空间可以完全用文本定义,即它们易于编写、携带和序列化

在路线图上,即将推出™:

  • 彻底缓存计算(一切都准备好了!)
  • 插件系统(目前,自定义对象需要手动注册)

常见问题

(实际上并不经常问这些问题。)

我不从事计算化学/凝聚态物理。我应该在乎吗?

很遗憾,简短的回答可能是否定的。

不过,我认为这个图书馆的建筑相当整洁,所以也许它可以提供一些稍微有趣的阅读。tune组件非常通用,在我看来,它为hyperopt提供了一个非常干净的接口。engine也相当通用,提供了一种序列化specify的好方法。ic类型的python对象到yaml

我为什么要用这个?

如果您需要使用上面提到的任何库,可能会更方便。如果您需要进行超参数优化,并且厌倦了简单的hyperopt,那么它可能很有用。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
maven字段#getGenericType()抛出java。lang.TypeNotPresentException   用java绘制三角形的几何图形   java无法下载主题和发件人地址(rediff)   java如何使代码线程安全   java在尝试转换FileInputStream中的文件时,我遇到了一个FileNotFound异常   java Moxy和Jackson如何将Json映射到Pojo   在foreach循环中使用BufferedWriter生成新行的java问题   java为什么我的测试在单次执行中运行时间小于1秒,而在maven构建中运行时间大于20秒?   java如何显示下载附件的进度条   了解java rmi的良好实践   .net可以将Java portlet嵌入ASP。网页?   循环如何多次执行Java方法?   java如何确保用户输入在给定的有效范围内?   java单元测试定理   java如何在IntelliJ上运行外部构建项目?   JAVA:试图编写一个检查字符串是否为数字的方法。总是返回错误   javahadoop将特定键的所有map方法生成的所有值都发送到一个reduce方法,对吗?   在java中读取和使用文件