跳到内容

oshillou/GEMINI公司

文件夹和文件

姓名姓名
上次提交消息
上次提交日期

最新提交

 

历史

6承诺
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

存储库文件导航

双子座

介绍

此回购包含一个对数据集和模型执行聚类的工具你自己的通过最大化通用相互信息(双子座)。它还允许复制我们出版物中的实验:


@诉讼{title={判别聚类的广义互信息},作者={L.Ohl、P.A.Mattei、C.Bouveyron、W.Harchaoui、A.Droit、M.Leclercq、F.Precioso}}

重要:所有GEMINI计算的核心实现可以在文件中找到损失/gemini.py.

  1. 复制论文中的实验
    1. MNIST公司
    2. CIFAR10公司
    3. 月亮
    4. 狄拉克模型
    5. 其他
  2. 什么是双子座?
  3. 文档
    1. 用例
    2. 配置文件
    3. 示例
    4. 设计您的模型
    5. 查看您的结果

复制论文中的实验

我们在这里列出了按主题复制论文中实验的命令行。确保已安装来自的所有软件包要求.txt。复制实验的一般命令是运行:

python main.py—配置路径/to/some/configuration/files

MNIST公司

使用位于中的配置文件config_experiments/mnist/lenet5配置实验config_experiments/mnist/mlp.

CIFAR第10期

您必须首先从SIMCLR中提取我们没有提供的功能。请在以下时间之前运行:

cd其他&&python导出simclr_features.py

然后可以检查simclr功能是否已导出到位于数据/客户相似性文件夹。然后可以使用位于配置_实验/cifar10使用lenet 5模型和config_experiments/cifar10_resnet配置实验使用resnet模型。

月亮

确保首先对文件进行cythonizeutils/floyd_warshall/fw.pyx公司在运行主脚本之前。要重现moons的实验,请使用config_experiments/moons中的配置文件

狄拉克模型

要用分类模型(即δ-狄拉克分布的混合物)重现实验,请运行:

cd其他&&python dirac_models.py

其他

您将在中找到几个脚本其他用于图形生成或基线(如KMeans和GMM)的文件夹。

什么是双子座?

双子座是一个简单的度量标准,看起来像标准的相互信息。标准相互信息定义如下:

$$\mathcal{I}(X;Y)=\mathbb{电子}_{y\sim p(y)}[D_\text{KL}(p(x|y)||p(x))]\四元$$

哪里x美元$年美元$是两个随机变量$D_\text{KL}$指的是Kullback-Leibler散度。对于此次回购,在集群的全球背景下,随机变量x美元$代表数据时可以是连续的或离散的,而美元$是离散的,表示千美元$选择的簇。

双子座通过改变Kullback-Leibler发散角来改进这一概念,以适应其他类型的发散或注意到的距离D美元$虽然标准互信息仅将集群的分布与整个数据分布进行比较,但GEMINIs引入了将集群分布与其他数据分布进行对比的思想。这两个概念分别命名为一对多(OvA)和一对一(OvO):

$$\mathcal{I}^\text{OvA}_D(X;Y)=\mathbb{电子}_{y\simp(y)}[D(p(x|y)||p(x))]\四元$$ $$\mathcal{I}^\text{OvO}_D(X;Y)=\mathbb{电子}_{y_1,y_2\sim p(y)}[D(p(x|y_1)||p(x| y_2))]\quad$$

在OvO设置中,两个随机变量y_1美元$y_2美元$都是独立的。当前支持的距离(或散度)D美元$是:

  • KL散度
  • 总变化量
  • 方形海林格
  • 最大平均差异(MMD),也称为内核得分
  • Wasserstein距离

最后两个元素与积分概率度量(IPM)。它们需要有关通过数据空间上的距离或内核传递的数据的附加信息$\mathcal{X}$例如欧氏距离、RBF核。为了在本报告中同时说明内核和距离的概念,我们将其命名为相似性.

已知属性

  1. 与互信息类似,$X\perp Y\表示\mathcal{I}^\text{OvO}(X;Y)=\mathcal{I}^\text}OvA}(X;Y)=0$
  2. 对于二进制集群中的任何IPM距离:$\mathcal{I}^\text{OvA}(X;Y)=\mathcal{I}^\text}OvO}(X;Y)$
  3. 双子座不一定使用所有集群。这意味着集群的数量千美元$只是一个最大值。

文档

用例

您可以将此回购视为一个完整的黑盒子,它可以链接您的火炬模型、您的个人数据集,如果使用IPM,还可以链接您自定义的相似性。全局设置可以通过以下图表进行描述:

图表A(GEMINI-linker)B[your_dataset_file.py]C[your_similarity.py]D[your_model.py]E[配置文件.py]A-->BA-->CA-->DE-->答

因此,您必须提供一个配置文件,该文件将告诉程序从何处获取您的个人数据文件、模型文件和相似性文件以及培训参数,例如纪元数、簇数、批量大小、GEMINI选择等。

然后可以通过运行以下命令调用程序:

python main.py--配置YOUR_config_FILE[--模型名称model_name][--种子seed]

参数配置是必需的,应该指示您的配置文件。其他两个选项是可选的。模型名称设置将保存所有跑步结果的文件夹的名称,而不是默认的自动生成文件夹。最后,种子指定时设置随机种子。

配置文件

我们提供了一个模板配置,其中详细解释了中的所有参数配置/模板配置.yml。我们在这里详细介绍了参数的所有可用选项:

  • 双子座\距离:wasserstein、mmd、kl、tv、hellinger
  • 双子座\ovo:true,false
  • 相似性_fct:线性、高斯、欧氏、平方或自定义相似性的相对路径
  • 使用(_C):true,false
  • 优化程序:亚当、rmsprop、sgd

设计您的模型

模型设计

本次回购的模型设计分为三部分。我们认为模型由三个不同的元素组成:编码器$\mathcal{E}$,群集头$\mathcal{C}$.和解码器$\mathcal{D}$。每个都应在单独的文件中设计,并传递给各自的参数型号\编码器,模型\簇头模型\解码器配置文件的。每个文件必须具有名为的函数获取模型(**kwargs)。此函数将被调用以获取模型的一部分,其错误是您在配置文件中以字典格式提供的错误型号\encoder_kwargs,模型\集群头部夸格斯型号\decoder_kwargs.

所有三个文件都应该返回一个普通的nn。模块火炬模型。Cuda和数据并行性已经由程序本身处理。

聚类输出为:

$$p(y|x)=\text{Cat}(\mathcal{C}\circ\mathcal{E}(x))\quad$$

注释:解码器$\mathcal{D}$仅当指定重建损失时才需要,即。regularisations\reconstruction_weight>0。否则将被忽略。

示例可以在中找到模型\自定义模型

数据集设计

与模型文件类似,数据集文件应该只包含两个函数:

  • 获取训练数据集(**kwargs)它返回用于训练的数据集。这是强制性的。
  • 获取值数据集(**kwargs)它返回数据集进行验证。可选。如果没有提供验证功能,则在培训期间不会进行验证。

两种方法都必须返回继承自的数据集类火炬.utils.data。数据集,例如。Tensor数据集,MNIST公司等。

kwargs由参数中的配置文件提供数据集_kwargs.

示例可以在中找到数据\自定义数据集.

相似性设计

为了提供自己的相似性,必须在文件中编写一个继承自基类的类数据相似性。相似性。该类必须具有__呼叫__(自我、X、Y)计算两个元素X和Y之间的相似性。

注释:目前,我们无法支持基于邻域排序的距离或内核。事实上,相似性是在初始化过程中逐批预先计算的,而批采样破坏了最近邻搜索的正确性。

示例见data\custom_datasets\transform_similarity.py.

示例

我们提供了两个可以使用命令执行的完整运行示例:

python main.py--配置configs/examples/iris_mlp_tv_ova.pypython main.py—配置配置/examples/mnist_mmd_ovo_vat.py

第一个示例使用GEMINI将一个由10个节点组成的隐藏层的简单MLP拟合到虹膜数据集$\mathcal美元{我}_\text{TV}^\text{OvA}$.第二个示例使用基于LeNet5体系结构的卷积自动编码器执行MNIST聚类。增值税规则化进一步增加了熵损失,以确保集群的平衡。

查看结果

结果将导出到指定的文件夹中结果路径/模型名称。可以使用张量板在整个培训过程中查看指标。

张量板--日志目录结果路径/模型名称

关于

未提供说明、网站或主题。

资源

星星

观察者

叉子

发布

未发布任何版本

包装

未发布包