版本

0.9.6dev

新功能

  • 为部分 FGW 实现 CG 求解器 (PR #687)

  • ot.solvers.solve 添加了功能 grad=last_step (PR #693)

  • 自动PR标签和发布文件更新检查 (PR #704)

  • 将子模块 ot/lp/__init__.py 重新组织为单独的文件 (PR #714)

  • 修复模块 ot.gaussian 的文档 (PR #718)

已关闭的问题

  • 修复了依赖于弃用的 cvxpy ECOS 求解器的 ot.mapping 求解器 (PR #692, Issue #668)

  • 修复了 ot.gmm 中的数值错误 (PR #690, Issue #689)

  • 向文档添加版本号 (PR #696)

  • 更新默认正则化的文档在 ot.unbalanced sinkhorn 求解器 (问题 #691, PR #700)

  • PR #710提供gromovlpunbalanced文件夹提供清晰的文档

0.9.5

2024年11月

这个新版本包含几个新特性,首先是一个新颖的 Gaussian Mixture Model Optimal Transport (GMM-OT) 求解器,旨在比较 GMM,同时强制运输计划保持为 GMM,得益于闭式解,使其在高维匹配问题中具有实用性。我们还扩展了我们的一般不平衡 OT 求解器,以支持正的参考度量在正则化项中,然后添加了新颖的 translation invariant UOT 求解器,展示了更高的收敛速度。我们还实现了几个新的求解器,并增强了现有求解器,以在不同空间中执行 OT。这些包括一个 semi-relaxed FGW barycenter 求解器,结合新的初始化启发式方法用于内部散度计算,以执行图形分区或字典学习。接着是新颖的 unbalanced FGW and Co-optimal transport 求解器,以提升在这类匹配问题中的对离群值的鲁棒性。最后,我们更新了部分 GW 的实现,现在支持不对称结构和 KL 散度,同时利用新的通用条件梯度求解器来解决部分运输问题,实现显著的速度提升。这些最新更新需要对我们通用条件梯度求解器的线搜索函数进行一些修改,为其他基于 GW 的求解器的未来改进铺平道路。最后但同样重要的是,我们实现了一个预提交机制,以自动纠正我们未来贡献者可能犯的常见编程错误。

此版本还包含一些错误修复,与ot.emd_1d / ot.emd2_1d中对任何度量的支持以及在ot.gaussian中对任何权重的支持有关。

重大变更

  • 作为参数 line_search 提供给 ot.optim.generic_conditional_gradient 的自定义函数现在必须具有签名 line_search(cost, G, deltaG, Mi, cost_G, df_G, **kwargs),新增输入 df_G 为在传输计划 G 上评估的正则化器的梯度。此更改旨在提高具有二次多项式函数作为正则化器的求解器的速度,例如 Gromov-Wassertein 损失 (PR #663)。

新功能

  • 基于 pre-commit 的新 linter,使用 ruff、codespell 和 yamllint (PR #681)

  • nx.kl_div 添加了特性 mass=True (PR #654)

  • 实现了高斯混合模型OT ot.gmm (PR #649)

  • 新增功能 semirelaxed_fgw_barycenters 和通用 FGW 相关的重心更新 update_barycenter_structureupdate_barycenter_feature (PR #659)

  • 通过 semirelaxed_init_plan 为 sr(F)GW 问题添加了初始化启发式方法,集成在所有 sr(F)GW 求解器中 (PR #659)

  • 改进了 ot.plot.plot1D_mat (PR #649)

  • 添加了 nx.det (PR #649)

  • nx.sqrtm 现在可以广播(接受 …, d, d)输入 (PR #649)

  • 重构了 ot.unbalanced 模块 (PR #658)

  • 添加了 ot.unbalanced.lbfgsb_unbalanced2 并在所有不平衡求解器中增加了灵活的参考度量 c (PR #658)

  • 实现了融合的不平衡Gromov-Wasserstein和不平衡共同最优传输 (PR #677)

  • 在将ot.partial中的部分Gromov-Wasserstein函数弃用之前的注意事项已移至ot.gromov (PR #663)

  • 创建 ot.gromov._partial 添加新特性 loss_fun = "kl_loss"symmetry=False 到所有求解器,同时提高速度 + 适当地更新 ot.solvers (PR #663)

  • 添加了 ot.unbalanced.sinkhorn_unbalanced_translation_invariant (PR #676)

  • 重构了 ot.bregman._convolutional 以提高可读性 (PR #709)

已关闭的问题

  • 修复了 ot.gaussian 在计算均值时忽略权重的问题 (PR #649, Issue #648)

  • 修复了 ot.emd_1dot.emd2_1d 错误地允许任何度量(PR #670, Issue #669

0.9.4

2024年六月

这个新版本包含几个新功能和bug修复。在新功能中,我们有新颖的 Quantized FGW 求解器,可以用来加速在大数据集上计算FGW损失,或在成对矩阵上促进结构。我们还更新了连续熵映射,以提供高效的样本外连续映射,得益于熵规范化。我们还为 ot.solve 提供了新的通用不平衡求解器和BFGS求解器以及说明性示例。最后,我们有一个新的 Low Rank Gromov-Wasserstein 求解器,可以用来计算两个大规模数据集之间的GW距离,采用低秩近似。

从维护的角度来看,我们现在有一个新的选项,可以使用 pip install POT[all] 安装可选依赖项,特定后端或子模块的依赖项也可以单独安装。pip 选项包括: backend-jax, backend-tf, backend-torch, cvxopt, dr, gnn, plot, all。我们还为此版本提供了对 NumPy 2.0 的支持(这些包现在应该与 NumPy 2.0 及以下版本兼容)。我们还修复了几个问题,例如 FGW 求解器的梯度符号错误、ot.emd2 的空权重,以及部分 GW 中的线搜索。我们还将 test/test_gromov.py 拆分为 test/gromov/,以使测试更易于管理。

新功能

  • 添加了对NumPy 2.0的支持 (PR #629)

  • 新的量化FGW求解器 ot.gromov.quantized_fused_gromov_wasserstein, ot.gromov.quantized_fused_gromov_wasserstein_samplesot.gromov.quantized_fused_gromov_wasserstein_partitioned (PR #603)

  • ot.gromov._gw.solve_gromov_linesearch 现在有一个参数来指定矩阵是否是对称的,在这种情况下,计算可以更快地完成 (PR #607).

  • 连续熵映射 (PR #613)

  • 用于 ot.solve 的新的一般不平衡求解器和 BFGS 求解器及说明示例 (PR #620)

  • 将包络定理的梯度计算添加到 ot.solve 的 sinkhorn 求解器中,使用 grad='envelope' (PR #605).

  • 增加了对 低秩 Gromov-Wasserstein 的支持,使用 ot.gromov.lowrank_gromov_wasserstein_samples (PR #614)

  • 可选依赖项现在可以通过 pip install POT[all] 安装。特定后端或子模块的依赖项也可以单独安装。pip 选项包括: backend-jax, backend-tf, backend-torch, cvxopt, dr, gnn, allcupy 后端的安装应使用 conda 进行。

已关闭的问题

  • 修复当 G0 None 时 sr(F)GW 求解器的 GPU 兼容性(PR #596)

  • 修复低秩Sinkhorn的文档和示例 (PR #601)

  • 修复 ot.emd2 的空权重问题 (PR #606, Issue #534)

  • 修复了与 ot.gromov._gw.fused_gromov_wasserstein2ot.gromov._gw.gromov_wasserstein2 的梯度相关的符号错误,针对 kl 损失 (PR #610)

  • 修复sr(F)GW条件梯度求解器的相同符号错误 (PR #611)

  • test/test_gromov.py 切分为 test/gromov/ (PR #619)

  • 修复 (F)GW 重心函数以支持在 1 个输入上计算重心 + 不推荐将结构作为列表 (PR #628)

  • 修复局部GW中的线搜索,并将默认初始化更改为局部传输计划的内部 (PR #602)

  • 修复 ot.da.sinkhorn_lpl1_mm 与 JAX 的兼容性 (PR #592)

  • 在 Scipy 1.14 上修复 linesearch 导入错误 (PR #642, Issue #641)

  • 将支持的JAX版本从jax<=0.4.24升级到jax<=0.4.30 (PR #643)

0.9.3

2024年1月

已关闭的问题

  • 修复了ot.da.BaseTransport拟合方法中与不匹配标签的成本修正相关的问题。此修复解决了在PR #587中引入的原始问题(PR #593)

0.9.2

2023年12月

此新版本包含几个新特性和错误修复。在新的特性中,我们有一个新的求解器,用于估算最近的Brenier势(SSNB),可以用于OT映射估算(在小问题上),新的Bregman交替投影梯度求解器用于GW和FGW,以及用于Bures-Wasserstein重心的新求解器。我们还提供了一个用于低秩Sinkhorn的第一个求解器,这将在下一版本中用于提供低秩OT扩展。最后,我们有一个新的精确线搜索用于(F)GW求解器,带有KL损失,可以用来改善求解器的收敛性。

我们还有一个新的 LazyTensor 类,可以用来建模OT计划和大规模OT中的低秩张量。这个类用于返回新的 geomloss Sinkhorn求解器在经验样本上的计划,这可以在CPU或GPU上实现10倍/100倍的速度提升,并且具有懒惰的实现,使得解决几百万样本的非常大问题成为可能。

我们还提供了一个新的API,用于从经验样本中解决OT问题,使用ot.solve_sample。最后,我们有一个新的API,用于Gromov-Wasserstein求解器,使用ot.solve_gromov函数,该函数集中大多数(F)GW方法并统一表示法。下面是如何使用新API的一些示例:

# Generate random data
xs, xt = np.random.randn(100, 2), np.random.randn(50, 2)

# Solve OT problem with empirical samples
sol = ot.solve_sample(xs, xt) # Exact OT betwen smaples with uniform weights
sol = ot.solve_sample(xs, xt, wa, wb) # Exact OT with weights given by user

sol = ot.solve_sample(xs, xt, reg= 1, metric='euclidean') # sinkhorn with euclidean metric

sol = ot.solve_sample(xs, xt, reg= 1, method='geomloss') # faster sinkhorn solver on CPU/GPU

sol = ot.solve_sample(x,x2, method='factored', rank=10) # compute factored OT

sol = ot.solve_sample(x,x2, method='lowrank', rank=10) # compute lowrank sinkhorn OT

value_bw = ot.solve_sample(xs, xt, method='gaussian').value # Bures-Wasserstein distance

# Solve GW problem
Cs, Ct = ot.dist(xs, xs), ot.dist(xt, xt) # compute cost matrices
sol = ot.solve_gromov(Cs,Ct) # Exact GW between samples with uniform weights

# Solve FGW problem
M = ot.dist(xs, xt) # compute cost matrix

# Exact FGW between samples with uniform weights
sol = ot.solve_gromov(Cs, Ct, M, loss='KL', alpha=0.7) # FGW with KL data fitting


# recover solutions objects
P = sol.plan # OT plan
u, v = sol.potentials # dual variables
value = sol.value # OT value

# for GW and FGW
value_linear = sol.value_linear # linear part of the loss
value_quad = sol.value_quad # quadratic part of the loss

用户被鼓励使用新的 API(它简单得多),但在 POT 1.0 发布之前,它可能仍然会有小的变化。

我们还修复了一些问题,最紧迫的是在安装pytorch时出现的GPU内存分配问题,现在由于后端的延迟初始化这一问题不再发生。我们现在也有可能通过环境来停用某些后端,这防止了POT导入它们并可以大大加快导入速度。

新功能

  • 增加了对 最近布雷尼尔势 (SSNB) 的支持 (PR #526) + 小修复 (PR #535)

  • 调整了 get_backend 以忽略 None 输入 (PR #525)

  • ot.da.sinkhorn_l1l2_gl中,广义条件梯度的回调现在是向量化的,以提高性能 (PR #507)

  • 后端的 linspace 方法现在有了 type_as 参数,用于转换为相同的数据类型和设备。 (PR #533)

  • 现在 convolutional_barycenter2dconvolutional_barycenter2d_debiased 函数可以在不同设备上工作.. (PR #533)

  • 新的Gromov-Wasserstein求解器API,使用ot.solve_gromov函数(PR #536

  • 默认使用从scipy获得的新LP求解器用于LP重心(PR #537

  • 将轮子更新到Python 3.12,并移除没有scipy轮子的旧i686架构(PR #543

  • 升级了不平衡OT求解器以提供更多灵活性 (PR #539)

  • 添加LazyTensor用于建模计划和大规模OT中的低秩张量 (PR #544)

  • gromov_wassersteinfused_gromov_wasserstein 添加精确的线性搜索,使用 KL 损失 (PR #556)

  • 向所有半松弛(融合的)Gromov-Wasserstein求解器添加KL损失 (PR #559)

  • 进一步升级了不平衡OT求解器,以提供更多灵活性和未来使用(PR #551

  • 新的API函数 ot.solve_sample 用于解决来自经验样本的OT问题 (PR #563)

  • 对经验样本上的`geomloss`求解器的封装 (PR #571)

  • 添加 stop_criterion 特性到 (un)regularized (f)gw barycenter 解算器 (PR #578)

  • 添加 fixed_structurefixed_features 到熵fgw重心求解器 (PR #578)

  • 添加带有KL投影的新的BAPG求解器用于GW和FGW (PR #581)

  • ot.gaussian 中添加 Bures-Wasserstein 重心及示例 (PR #582, PR #584)

  • 域适应方法 SinkhornL1l2Transport 现在支持 JAX 后端 (PR #587)

  • 增加了对低秩Sinkhorn因式分解的支持(PR #568

已关闭的问题

0.9.1

2023年8月

这个新版本包含了几个新特性和错误修复。

新特性包括一个新的子模块 ot.gnn,它包含两个新的图神经网络层(与 Pytorch Geometric 兼容),用于基于模板的图的池化,并提供了一个关于 图分类 的示例。与此相关,我们现在还提供了 FGW 和半松弛 FGW 求解器,其结果损失相对于参数 alpha 是可微的。在(F)GW 方面的其他贡献包括用于近端点算法的新求解器 可以用来解决熵 GW 问题(使用参数 solver="PPA")、用于熵 FGW 重心的新求解器、基于 Sinkhorn 的新求解器用于熵半松弛(F)GW、为求解器提供热启动的可能性,以及样本的可选边际权重(默认使用均匀权重)。最后,我们在子模块 ot.gaussianot.da 中增加了用于高斯 Gromov-Wasserstein 的新损失和映射估计器,可以作为 GW 的快速替代方案,并估计可能具有不同大小的未注册空间之间的线性映射(有关说明,请参见更新的 线性映射示例)。

我们还提供了一个新的求解器用于熵瓦瑟斯坦成分分析,它是著名的PCA的一个推广,考虑了样本的局部邻域。我们现在还在ot.smooth中有一个新的求解器用于稀疏约束的OT(最后一个图),可以用来找到具有稀疏性约束的正则化OT计划。最后,我们有一个用于常规1D分布的第一个多边际求解器,具有Monge损失(请见这里)。

文档和测试也已更新。我们的代码覆盖率现在接近95%。文档已更新,一些示例已被精简,以更快构建并避免与CircleCI的超时问题。我们还为主分支和批准的PR添加了一个可选的GPU CI,当GPU运行器在线时可以使用。

许多其他错误和问题已经修复,我们要感谢所有的贡献者,无论是老的还是新的,正是他们使得此版本成为可能。更多详细信息如下。

新功能

  • ot.gaussian 中添加了 Bures Wasserstein 距离 (PR ##428)

  • 添加了广义Wasserstein质心求解器 + 示例 (PR #372), 修复了示例中的图形细节 (PR #376)

  • 添加免费支持Sinkhorn重心 + 示例 (PR #387)

  • 使用函数 ot.solve 的OT求解器的新API (PR #388)

  • ot.partialot.smooth 的后台版本 (PR #388)

  • 在基于Sinkhorn的方法中为双向量的warmstart添加了参数在 ot.bregman (PR #437)

已关闭的问题

  • 修复了文档画廊部分的问题 (PR #395)

  • 修复了一个问题,即 sinkhorn divergence 没有梯度 (Issue #393, PR #394)

  • 修复了一个问题,我们无法要求TorchBackend将随机张量放置在GPU上 (问题 #371, PR #373)

  • 修复了Sinkhorn求解器假设对称成本矩阵的问题 (Issue #374, PR #375)

  • 修复了一个问题:在达到迭代限制时,无论 Python 的 stderr 流状态如何,都会通过 std::cerr 报告到 stderr (PR #377)

  • 修复了ot.dist中的metric参数不允许可调用参数的问题 (Issue #378, PR #379)

  • 修复了一个问题,即ot.emd中的最大迭代次数不允许超过2^31 (PR #380)

  • 修复了一个问题,即指针在EMD求解器中会溢出,导致返回的运输计划不完整,当其大小超过某个值时(略高于46k,其平方大约为2^31) (PR #381)

  • 当emd2中的质量不匹配时引发错误 (PR #386)

  • 修复了一个问题,该问题是在GPU上执行pytorch示例时会抛出错误的情况 (Issue #389, PR #391)

  • 为scipy的一个bug添加了一个解决方法,该bug使得你无法使用“None”权重属性计算汉明距离。(问题 #400PR #402

  • 修复了由于matplotlib API的一些更改导致文档无法生成的问题 (问题 #403, PR #402)

  • 由于弃用问题,将 Numpy C 编译器替换为 Setuptools C 编译器 (Issue #408, PR #409)

  • 修正了弱最优传输文档字符串 (问题 #404, PR #410)

  • 修复了参数 log=TrueSinkhornLpl1Transport 中的错误 (问题 #412, PR #413)

  • 修复了关于 warn 参数在 sinkhorn2 中的问题 (PR #417)

  • 修复了一个问题,即在empirical_sinkhorn_divergence中,参数stopThr因为被显式指定stopThr=1e-9的子调用而失效了(问题 #421PR #422)。

  • 修复了一处错误,该错误破坏了一个示例,在这个示例中我们尝试创建一个形状不同的数组的数组 (Issue #424, PR #425)

0.8.2

此次发布引入了几个新的显著功能。较不重要但最令人兴奋的一点是我们现在有了工具箱的标志(彩色和深色背景):

这个标志是使用matplotlib生成的,并使用POT提供的OT问题的解决方案(使用ot.emd)。生成标志也可以通过简单的python脚本完成,该脚本也在文档库中提供。

新的OT求解器包括 Weak OTOT with factored coupling,可以用于大数据集。非正则化不平衡OT的Majorization Minimization求解器现在也可用。我们现在还提供GW和FGW解混字典学习的实现。现在,可以使用自动微分来求解熵和二次正则化OT的对偶,以进行完整或随机优化,这要归功于新的函数,可以计算二次正则化OT的对偶损失,并重构部分或全部数据的OT计划。例如,它们可以用于解决具有随机梯度的OT问题或估计对偶势作为神经网络

在后端方面,我们现在在领域适应 ot.da 和不平衡OT ot.unbalanced 模块中拥有兼容的后端函数和类。这意味着DA类可以在所有兼容的后端的张量上使用。自由支持的Wasserstein重心 求解器现在也兼容后端。

最后,我们对文档进行了更新,以提供画廊中现有示例的更新以及几个新示例,包括 GW 字典学习 弱最优运输, 基于神经网络的二次势能估计分解耦合OT。 .

新功能

  • 移除已弃用的 ot.gpu 子模块 (PR #361)

  • 更新画廊中的示例 (PR #359)

  • 为正则化OT和后端示例添加随机损失和OT计划计算(PR #360)

  • 使用 emd 和 sinkhorn 实现分解的 OT (PR #358)

  • POT的全新标志 (PR #357)

  • 在快速入门指南中更好的相关示例列表,包含 minigalleryPR #334

  • 在WDA中添加可选的日志域Sinkhorn实现,以支持正则化参数的较小值(PR #336)

  • 用于 ot.lp.free_support_barycenter 的后端实现 (PR #340)

  • 添加弱OT求解器 + 示例 (PR #341)

  • 为领域适应和不平衡求解器添加后端支持 (PR #343)

  • 添加 (F)GW 线性字典学习求解器 + 示例 (PR #319)

  • 在文档发布页面添加相关的PR和问题链接 (PR #350)

  • 添加新的最小化-最大化算法以解决精确的不平衡OT + 示例 (PR #362)

已关闭的问题

0.8.1.0

2021年12月

这是一个错误修复版本,将从安装中移除 benchmarks 模块,并修正文档生成。

已关闭的问题

  • 文档生成中的错误(标签与主分支推送,PR #332

  • 移除全局命名空间中的基准安装 (问题 #331, PR #333)

0.8.1

2021年12月

此版本修复了多个错误,并引入了两个新的后端:Cupy和Tensorflow。请注意,只有在tensorflow启用了Numpy行为时(对于在tensorflow中默认不进行的转置),tensorflow后端才能正常工作。我们还在backend文档中提供了一个简单的CPU GPU基准测试,用于sinkhorn求解器。

此版本还带来了一些依赖关系和兼容性的变化。首先,我们删除了对 Python 3.6 的测试,该版本将来不会更新。还请注意,POT 现在依赖于 Numpy (>= 1.20),因为近期的 ABI 变化使得该版本的轮子与旧版本的 numpy 不兼容。如果您确实需要旧版本的 numpy,POT 将可以正常工作,但您需要从源代码构建它。

一如既往,我们希望感谢那些帮助改进POT(并修复bug)的贡献者。

新功能

  • 关于CPU/GPU和后端之间的Sinkhorn求解器的新基准(PR #316)

  • 新的 tensorflow 后端 (PR #316)

  • 新的Cupy后端 (PR #315)

  • 文档始终与 README、RELEASES、CONTRIBUTING 和 CODE_OF_CONDUCT 文件保持最新状态 (PR #316, PR #322)。

已关闭的问题

0.8.0

2021年11月

这个新的稳定版本引入了几个重要特性。

首先,我们现在有一个与OpenMP兼容的精确ot求解器在 ot.emd 中。当参数 numThreads 大于一时,将使用OpenMP版本,并且可以在多核机器上实现良好的加速。

其次,我们引入了一种后台机制,使得可以在Numpy、Pytorch和Jax数组上无缝使用标准POT功能。其他后台正在开发中,但目前POT可以无缝用于在Pytorch中训练神经网络。值得注意的是,我们提出了第一个可微分的精确OT损失计算,使用ot.emd2(可以对成本矩阵和样本权重进行微分),同时也适用于经典的Sinkhorn损失,使用ot.sinkhorn2,一维的Wasserstein距离,使用ot.wasserstein_1d,切片Wasserstein,使用ot.sliced_wasserstein_distance以及Gromov-Wasserstein,使用ot.gromov_wasserstein2。关于如何使用这个新特性的示例现在已在文档中提供,其中使用Pytorch后台来估算一个最小Wasserstein估计器,一个生成网络(GAN),用于切片Wasserstein梯度流优化Gromov-Wassersein距离。请注意,Jax后台仍在早期开发中,目前速度相当慢,我们强烈建议Jax用户在可能的情况下使用OTT工具箱。作为这个新特性的结果,旧的ot.gpu子模块现在已被弃用,因为GPU实现可以在torch后台上使用GPU数组。

其他新颖的特性包括对 采样的 Gromov Wasserstein 和 逐点 Gromov Wasserstein 的实现, 在对数空间中使用 method='sinkhorn_log' 的 Sinkhorn, 投影鲁棒 Wasserstein, 以及 去偏 Sinkorn 重心

此次发布还将简化安装过程。我们现在有一个 pyproject.toml,它定义了构建依赖,POT 现在应该可以在未安装 cython 的情况下构建。此外,我们现在为 linux aarch64 提供了预编译的轮子,它通常用于 Raspberry PI 和安卓手机,以及用于 ARM 处理器的 MacOS。

最后,POT被接受在机器学习研究期刊(JMLR)开放源代码软件轨道上发表,我们要求POT用户从现在开始引用这篇论文。文档得到了改进,特别是通过在快速入门指南中添加了“为什么OT?”部分,以及几个新例子以说明新功能。文档现在有两个版本:稳定版本https://pythonot.github.io/,对应于最后的发布版本,以及主版本https://pythonot.github.io/master,对应于GitHub上的当前主分支。

像往常一样,我们要感谢所有的POT贡献者(现在有37个人为该工具箱做出了贡献)。但对于这次发布,我们特别感谢来自IDRIS的AI支持团队的Nathan Cassereau和Kamel Guerda,他们对后台和OpenMP实现的开发给予了支持。

新功能

  • 精确OT求解器的OpenMP支持 (PR #260)

  • 在numpy/torch中运行POT的后端 + 精确求解器 (PR #249)

  • ot.bregman中的大多数功能的后端实现 (PR #280)

  • ot.optim 中大多数功能的后端实现 (PR #282)

  • ot.gromov 中大多数函数的后端实现 (PR #294, PR #302)

  • 测试不同类型和设备(CPU/GPU)的数组 (PR #304, #303)

  • 在对数空间中实现Sinkhorn,使用 method='sinkhorn_log'PR #290

  • L2不平衡OT的正则化路径实现 (PR #274)

  • 投影鲁棒Wasserstein的实现 (PR #267)

  • 去偏置的Sinkhorn重心的实现 (PR #291)

  • 采样的Gromov Wasserstein和逐点Gromov Wasserstein的实现 (PR #275)

  • 添加 pyproject.toml 并在未先安装 cython 的情况下构建 POT (PR #293)

  • 在样本上对sinkhorn的懒惰实现(PR #259

  • 文档清理 (PR #298)

  • 两个最新的文档 针对稳定版本主分支

  • 为树莓派和智能手机在ARM上构建轮子 (PR #238)

  • 将构建轮子更新到新版本和新Python (PR #236, #253)

  • 切片Wasserstein距离的实现 (Issue #202, PR #203)

  • 将最小构建添加到持续集成并单独执行pep8测试 (PR #210)

  • 测试加速和返回运行时间 (PR #262)

  • 将“为什么使用OT”的讨论添加到文档中 (PR #220)

  • 文档中关于离散OT的新引导示例 (PR #191)

  • 为Github上的问题/PR添加模板 (PR#181)

已关闭的问题

  • 调试GAN示例中的内存泄漏 (#254)

  • 调试 GPU 错误 (问题 #284, #287, PR #288)

  • 用于JAX后端的set_gradients方法 (PR #278)

  • CircleCI构建的更快的GAN示例 (PR #258)

  • 在Readme中更好的格式化 (PR #234)

  • 调试CI测试 (PR #240, #241, #242)

  • 部分OT求解器虚拟点中的错误 (PR #215)

  • 在Armijo线搜索时出现的错误 (问题 #184, #198, #281, 拉取请求 #189, #199, #286)

  • Bug 重心 Sinkhorn(问题 134, PR #195

  • 精确OT中的不可行解(问题 #126,#93, PR #217

  • 支持重心的文档 (问题 #200, PR #201)

  • 修复BaseTransport中的标签传输 (问题 #207, PR #208)

  • emd_1d中存在错误,未遵守的边界(问题 #169, PR #170

  • 移除了对 Python 2.7 的支持并更新了 codecov 文件 (PR #178)

  • 为WDA添加归一化并测试它 (PR #172, #296)

  • 新版本的 flake8 的代码清理 (PR #176)

  • 修复了 setup.py 中的要求 (PR #174)

  • 移除了特定的MacOS标志(PR #175)

0.7.0

2020年5月

这是POT的新稳定版本。我们对文档进行了很多更改,并添加了几个新特性,如部分OT、不平衡和多源OT领域适应,以及若干漏洞修复。一个重要的变化是我们创建了GitHub组织 PythonOT,现在拥有主要的POT代码库 https://github.com/PythonOT/POT,新文档的代码库现在托管在 https://PythonOT.github.io/

这是第一次发布,Python 2.7 测试已被移除。大部分工具仍然可以使用,但我们不再支持 Python 2.7,并将关闭相关问题。

文档已经进行了很多更改,现在托管在 https://PythonOT.github.io/而不是 readthedocs。这是一个艰难的选择,因为readthedocs不允许我们运行 sphinx-gallery来更新我们美丽的示例,而且维护起来也是一项巨大的工作。 文档现在在合并时会自动编译和更新。我们还因空间原因 从仓库中删除了笔记本,并且因为它们都可以在示例画廊中找到。 请注意,现在每个PR提交的文档构建输出都可以用来检查文档在合并前是否正确构建,而这在readthedocs中是无法做到的。

CI框架也进行了更改,从Travis迁移到Github Action,这使得在Windows、MacOS和Linux上能够更快地进行测试。我们现在还在Codecov.io上报告我们的覆盖率,达到了合理的92%覆盖率。我们现在在每次合并到主分支时为多个操作系统和Python版本生成轮包。它们作为此action的输出可用。从现在开始,这将使多平台发布变得更加简单。

在新特性方面,我们现在有 OTDA 类用于不平衡的 OT,一个新的领域适应类形式 多领域问题 (JCPOT),以及几个求解器来解决 部分最优运输 问题。

此次发布也是感谢所有POT贡献者(无论是老的还是新的)为使POT成为如此优秀的工具箱而做出贡献的时刻。下一版本将会有很多变化(包括API方面)。

功能

  • 关于https://PythonOT.github.io/的新文档 (PR #160, PR #143, PR #144)

  • 在CircleCI上使用sphinx-gallery构建的文档 (PR #145,PR #146, #155)

  • 在CI中运行sphinx gallery (PR #146)

  • 从仓库中删除笔记本,因为在文档中可用 (PR #156)

  • 在CI中构建轮子 (#157)

  • 从travis迁移到GitHub Action,支持Windows、MacOS和Linux (PR #148, PR #150)

  • 部分最优传输 (PR#141 和 PR #142)

  • 拉普拉斯正则化OTDA (PR #140)

  • 多源数据分析与目标偏移 (PR #137)

  • Screenkhorn 算法 (PR #121)

已关闭的问题

  • 将JMLR论文添加到自述文件中,并将Mathieu Blondel添加到致谢中 (PR #231, #232)

  • 不平衡OT示例中的错误 (Issue #127)

  • 在调用 setup.py clean 时清理 Cython 输出 (Issue #122)

  • 各种Macosx编译问题 (问题 #113, 问题 #118, PR#130)

  • EMD维度不匹配 (问题 #114, 在PR #116中修复)

  • 非正方形图像的二维重心错误 (问题 #124, 在 PR #132 中修复)

  • EMD 1D中的错误值 (问题 #138, 已在 PR #139中修复)

  • 为Gromov-Wassertein求解器记录错误(问题 #107,在PR #108中修复)

  • 重心函数中的权重问题 (PR #106)

0.6.0

2019年7月

这是POT的第一次官方稳定发布,这意味着跳跃到0.6! 该库已经在实际中使用了一段时间,我们已经达到了一个状态,很多基础的OT求解器都可用并经过测试。最近几个月它非常稳定,但在Pypi分类中仍然保持beta标志直到现在。

请注意,此版本将是最后一个正式支持Python 2.7的版本(有关更多原因,请参见 https://python3statement.org/)。在下一个版本中,我们将保留Python 2的travis测试,但在2020年将使其不再是合并的必要条件。

工具箱中的功能永远不可能完成,因为它是为了解决数学问题和研究而设计的,但随着新贡献的加入,我们现在实现了来自24篇科学论文的算法和求解器(在README.md文件中列出)。新功能包括经验Sinkhorn散度的直接实现,一个新的高效(Cython实现)求解器用于一维EMD和相应的一维Wasserstein。我们现在还实现了不平衡OT不平衡OT重心的求解器。一种新的Gromov-Wasserstein散度变体,称为融合Gromov-Wasserstein,也已被贡献,并在结构化数据和计算标记图的重心上提供了使用示例。

文档中已经完成了许多工作,包括几个新示例,这些示例对应新功能,并且对文档字符串进行了大量修正。但最明显的变化是为POT提供了一个新的快速入门指南,该指南提供了关于哪些函数或类可以解决哪些特定OT问题的多个指引。在可能的情况下,提供了相关示例的链接。

我们还将提供一些预编译的适用于Linux 64位的Python轮子,发布在github和pip上。这将简化之前需要C编译器和已安装的numpy/cython的安装过程。

最后,我们想要感谢众多为POT贡献力量的人,他们过去帮助建立了基础,并仍在为库带来新的特性和求解器而贡献。

功能

  • 将编译好的 manylinux 64位轮子添加到 pip 发行版中 (PR #91)

  • 添加快速入门指南 (PR #88)

  • 在travis上使doctest工作 (PR #90)

  • 更新文档 (PR #79, PR #84)

  • 一维EMD的求解器 (PR #89)

  • 用于正则化非平衡OT的求解器 (PR #87, PR#99)

  • 用于融合Gromov-Wasserstein的求解器 (PR #86)

  • 添加经验Sinkhorn和经验Sinkhorn散度 (PR #80)

已关闭的问题

  • 问题 #59 在使用 “pip install POT” 时失败(文档中有新细节+ 希望有轮子)

  • 问题 #85 无法运行GPU模块

  • 问题 #75 Greenkhorn 没有返回日志 (在 PR #76 中解决)

  • 问题 #82 当成本矩阵稍有不同时,Gromov-Wasserstein 失败

  • 问题 #72 Macosx 构建问题

0.5.0

2018年9月

POT已经两岁了!此次发布为工具箱带来了许多新功能,如下所列,同时也修复了几个错误。

在新特性中,我们可以突出一个 非正则化的 Gromov-Wasserstein 求解器,一个新的 贪婪变体的 sinkhorn非正则化卷积 (2D)自由支持 Wasserstein 重心以及 平滑随机 熵 OT 的实现。

POT 0.5 还重新使用 cupy 框架重写了 ot.gpu,而不是使用不再维护的 cudamat。请注意,虽然我们尽量将更改保持在最小范围内,但 OTDA 类已被废弃。如果您对 cudamat 的实现满意,我们建议您目前继续使用稳定版本 0.4。

代码质量也得到了提升,测试中的代码覆盖率达92%,现在在Travis构建的日志中打印。文档也得到了很大的改善,增加了新的模块和示例/笔记本。

这个新版本充满了新功能和修正,感谢老的和新的POT贡献者(您可以在readme中查看名单)。

功能

  • 添加非正则化Gromov-Wasserstein解算器 (PR #41)

  • 经验分布与90%测试覆盖率之间的线性OT映射 (PR #42)

  • 在类 EMDTransport 和 SinkhornLpL1Transport 中添加日志参数 (PR #44)

  • 为Pipy添加Markdown格式 (PR #45)

  • 在Travis上测试Python 3.5和3.6 (PR #46)

  • 非正则化的Wasserstein重心,使用scipy线性求解器和/或cvxopt (PR #47)

  • 将数据集函数重命名为更符合sklearn标准 (PR #49)

  • 平滑和稀疏的最优运输实现,具有熵和二次正则化 (PR #50)

  • 对偶和半对偶中的随机最优传输 (PR #52 和 PR #62)

  • 免费支持重心 (PR #56)

  • 加速Sinkhorn函数 (PR #57 和 PR #58)

  • 为2D图像添加卷积Wasserstein重心 (PR #64)

  • 添加贪婪Sinkhorn变体(Greenkhorn) (PR #66)

  • 大规模的ot.gpu更新,使用cupy实现(取代了不再维护的cudamat)(PR #67

弃用

过时的 OTDA 类已从 ot.da 和 ot.gpu 中移除,版本为 0.5 (PR #48 和 PR #67)。自 0.4 以来,这个弃用消息已经存在了一年,现在是时候停止了。

已关闭的问题

  • 问题 #35 : 从 ot/init.py 中移除 import plot (查看 PR #41)

  • 问题 #43 : EMDTransport 的不可用参数日志 (请参见 PR #44)

  • Issue #55 : UnicodeDecodeError: ‘ascii’ 在使用 pip 安装时发生

0.4

2017年9月15日

此次发布包含了许多来自新贡献者的贡献。

功能

  • 自动笔记本和文档更新 (PR #27)

  • 添加 Gromov Wasserstein 解决方案和 Gromov 重心 (PR #23)

  • emd和emd2现在可以返回双变量,并且有max_iter (PR #29 和 PR #25)

  • 与scikit-learn兼容的新域适应类 (PR #22)

  • 在travis上使用pytest进行适当的测试 (PR #19)

  • PEP 8 测试 (PR #13)

已关闭的问题

  • 由于固定最大迭代次数(#24)导致的emd收敛问题

  • 半监督DA错误 (#26)

0.3.1

2017年7月11日

  • 修正Windows上的emd中的错误

0.3

2017年7月7日

  • emd* 和 sinkhorn* 现在对多个目标分布执行并行处理

  • emd和sinkhorn用于OT矩阵计算

  • emd2 和 sinkhorn2 用于 OT 损失计算

  • 用于emd计算和Wasserstein判别分析的新笔记本

  • 重新定位笔记本

  • 更新文档

  • clean_zeros(a,b,M) 用于去除稀疏分布中的零值

  • 用于Sinkhorn和组lasso正则化的GPU实现

V0.2

2017年4月7日

  • 新的降维方法(WDA)

  • 高效的方法 emd2 仅返回传输(如果提供多个直方图则并行处理)

0.1.11

2017年1月5日

  • 添加sphinx画廊以改善文档

  • 在Sinkhorn中的小效率优化

  • 添加简单的 tic() toc() 函数用于计时

0.1.10

2016年11月7日

  • Sinkhorn的数值稳定性(对数域和epsilon缩放)

0.1.9

2016年11月4日

  • 更新用于领域适应的类和示例

  • 联合OT矩阵和映射估计

0.1.7

2016年10月31日

  • 原始领域适应类

0.1.3

  • pipy 工作

第一次预发布

2016年10月28日

它提供以下求解器:

  • 线性程序的OT求解器/ 地球搬运工距离。

  • 具有Sinkhorn Knopp算法的熵正则化OT求解器。

  • Wasserstein 重心的 Bregman 投影 [3] 和去混合。

  • 带有组lasso正则化的领域适应的最优传输

  • 用于正则化最优传输的条件梯度和广义条件梯度。

示例(包括Python和Jupyter Notebook格式)可以在示例文件夹中找到。