🛠️ 开发#
我们欢迎对Optax的贡献!无论您有错误报告、问题、功能建议还是代码分享,您的输入都是有价值的。
如何贡献#
对于大多数贡献,最好的开始方式是在Github的问题跟踪器中提出一个问题,描述要解决的问题或要实施的想法。这将有助于讨论实现新功能的最佳方式,并可以提供与其他贡献者合作的机会。
关于贡献代码的更多详细信息,请参阅源代码树中的 CONTRIBUTING.md 文件。
需要灵感吗? 如果您想开始为Optax做出贡献,但不知道从何入手,请查看我们的适合初学者的任务列表。
通用模板。 当贡献一个新的函数或优化器时,请使用以下文档字符串模板(参见 optax.adam 作为示例)
一行描述
如果可能的话,提供带有数学描述的更长的描述
参数部分
返回部分
示例
参考文献
附加说明,警告
文档需要以
reStructuredText格式编写!
例如,引用应该写成
Doe et al `Yet another optimizer to optimizer>`_, 2042)
(所以不要用markdown格式),对于
注释和警告也是如此。
更长的描述、参考资料和附加注释可能是可选的。但示例通常不是,它们是最好的文档部分。
改进文档#
文档是关键,我们特别高兴接受文档的改进。
我们的文档是用Sphinx编写的。您可以按照以下方式在本地构建文档:
安装要求:
pip install -e ".[docs]"构建文档: 从
docs文件夹中运行:make html(构建所有内容)make html-noplot(更快,跳过运行示例)
运行 doctest#
你可以在文档字符串中添加示例来说明如何使用这些函数。为了获得灵感,请参阅optax/_src/alias.py中adam的示例:部分的代码源。
要在本地测试这些示例,请运行
python -m doctest -v 。
纳入标准#
为了确保Optax保持为一个专注且高质量的库,我们对将算法包含在主optax包中有特定的指导原则:
已建立:算法通常应发布至少2年,被广泛引用(100+次引用),并展示出广泛的实用性。
显著改进:如果小修改能提供比广泛使用的方法更明显的优势,将会被考虑。
如果你的算法不符合主包标准,🔧 Contrib目录是分享创新工作的理想选择。请确保在提出新算法时,所有常见测试(在optax/contrib/_common_test.py或optax/_src/alias_test.py中)都已通过。这些测试确保了算法与optax不同功能(如梯度累积或不同的超参数)的互操作性。
设计文档#
对于更复杂或涉及的功能,我们建议在花费大量时间编写代码之前,先编写一份设计文档或RFC(“请求评论”)。这可以为其他贡献者提供输入的机会,并找到实现新功能的最佳方式,同时也为未来的用户提供了一个理解库如何工作的参考。
有关此示例,请参阅以下由Dian Wu撰写的[RFC] Proposal for complex-valued optimization in Optax,该提案导致了Optax中complex numbers支持的改进。
贡献者许可协议#
对本项目的贡献必须附有贡献者许可协议。您(或您的雇主)保留对您贡献的版权;这只是允许我们使用和重新分发您的贡献作为项目的一部分。请前往https://cla.developers.google.com/查看您当前的文件协议或签署新的协议。
通常你只需要提交一次CLA,所以如果你已经提交过一次(即使是为了不同的项目),你可能不需要再次提交。
团队#
Optax 是由 Google DeepMind 和 Alphabet 的研究团队以及不断增长的开源贡献者社区开发的。Optax 的工作是更广泛努力的一部分,旨在为 JAX 生态系统 提供最佳的环境,以支持机器学习/人工智能研究。以下是迄今为止贡献最多的(按提交次数计算)30 位贡献者列表:
迄今为止的贡献者完整列表可以在这里找到。
社区指南#
该项目遵循 Google的开源社区指南。