一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

2023-05-16

这篇博客发出来后,我用 Rust 复现代码出现问题。为此,我对对照了 sklearn 的相关代码,反复比较了两天,发现一处 bug,把 += 误写成了 =,导致数据量大的时候完全无法聚类。这个debug过程让我仔细梳理的 AP 算法的计算过程,今天我对这篇博客做了大规模修改,以便能原样展现原论文思想。

这几天的工作给我的体会是,自己觉得看懂论文了,如果不亲自把代码写出来,对论文原理的理解还是非常肤浅。

1. 基本思路

AP 算法的灵感来自投票选举。我们看下面的故事:

辽阔的草原上居住一群人。为便于组织管理,他们想通过投票选举部落首领,把人群分成若干部落,每个部落有一个首领。

投票行为受两个因素影响:

  • 个人支持度: 开始阶段,规则不允许投票给自己,因此,大家最初的投票意向是,把自己的一票投给最亲近的人,比如自己的老公,自己的儿子等。
  • 民意支持度: 如果某个打算投票给自己的儿子,但是发现大家都不愿意投票给自己儿子,而自己的侄子支持率还挺高,于是他可能决定退而求其次,支持自己的侄子。

这个方法面临两个问题需要思考:

  • 问题1:亲人竞争: 记得台湾地区选举领导人,有一年本来蓝营占优势,但是中间杀出个宋楚瑜,分散了蓝赢得选票,导致本来处于弱势的绿营占了上风。如果一个部落内,有两个人获得的支持度相近,如何决定谁最终胜出呢?有没有对聚类的效果造成负面影响?
  • 问题2:选票分散: 如果某个部落内部,父亲投票给母亲、母亲投票给儿子,儿子投票给姐姐,姐姐投票给父亲,部落内每个人的票都不够多,会不会造成聚类失败?

2. 一个简单例子

提供一个简单例子,假设点分布在实数轴上,坐标分别为 :
A = 1 , B = 2 , C = 3 , D = 5 , E = 6 A=1,B=2,C=3,D=5,E=6 A=1,B=2,C=3,D=5,E=6

2.1 相似度矩阵 s

用两个点之间的距离的负数作为两个点之间相似度:

s(i \ k)ABCDE
A?-1.0-2.0-4.0-5.0
B-1.0?-1.0-3.0-4.0
C-2.0-1.0?-2.0-3.0
D-4.0-3.0-2.0?-1.0
E-5.0-4.0-3.0-1.0?

按照距离的负数计算相似度,导致相似度全部都是负数。不过没关系,只要能保证数值越大,相似度越高即可,至于数据的符号,初始阶段并不重要。

对角线 s ( i , i ) s(i,i) s(i,i) 表示自己与自己的相似度,AP算法建议选择上述矩阵中元素的最小值或者中位数。接下来我们选择最小值得到完整的相似度矩阵:

s(i \ k)ABCDE
A-5.0-1.0-2.0-4.0-5.0
B-1.0-5.0-1.0-3.0-4.0
C-2.0-1.0-5.0-2.0-3.0
D-4.0-3.0-2.0-5.0-1.0
E-5.0-4.0-3.0-1.0-5.0

相似度矩阵可以这样理解,行 i i i 代表选民,列 k k k 代表竞选人。因为 s ( i , i ) s(i,i) s(i,i) 选择了矩阵元素的最小值,这表示开始阶段,每个人都不希望自己被选举为领导人。接下来的过程,我们要说服某些优势候选人提升自己成为领导人的意愿,同时也要说服选民选择把票投给具备民意基础的优势候选人。

2.2 个人支持度矩阵 r

上面的相似度矩阵虽然在一定程度上反映了亲情关系,但是,不同行之间数据是不能进行比较的。例如,第1行第2列最大值是-1,意味着选民1会投票给2。但是第2行的最大值-1有两个,意味着选民2会投票给选民1和3。第2行的两个-1才相当于第一行的一个-1。因此,我们需要把相似度矩阵 s s s 归一化,得到一个标准化的"个人支持度矩阵"。

归一化的方法,是每一行的每一个元素,都要与其他列最大的元素做差,计算自己在选民 i 这里与最强竞争对手的竞争优势。显然,个人支持度矩阵每一行最多有一个元素大于零。具体用下面的公式生成个人支持度矩阵 r r r

r n e w ( i , k ) ← s ( i , k ) − max ⁡ k ′ ≠ k { s ( i , k ′ ) + a ( i , k ′ ) } (1) \tag1 r_{new}(i,k) \gets s(i,k)-\max_{k' \neq k}\{s(i,k')+a(i,k')\} rnew(i,k)s(i,k)k=kmax{s(i,k)+a(i,k)}(1)
其中 a ( i , k ′ ) a(i,k') a(i,k) 在初始阶段为零矩阵,其具体含义后面会解释。因此,矩阵 r ( i , k ) r(i,k) r(i,k) 结果如下:

r_new(i \ k)ABCDE
A-4.01.0-1.0-3.0-4.0
B0.0-4.00.0-2.0-3.0
C-1.01.0-4.0-1.0-2.0
D-3.0-2.0-1.0-4.01.0
E-4.0-3.0-2.02.0-4.0

这个矩阵反映了在选民 i i i 对候选人 k k k 的支持度。一般来讲,每个选民只能投票给一个候选人,大都数情况下,矩阵的每一行只有一个正向支持度,其余的为负向支持度。

为防止矩阵 r r r 的更新幅度过大造成结果不收敛,引入阻尼系数 λ \lambda λ,控制更新幅度。一般取 λ = 0.5 \lambda=0.5 λ=0.5,更新公式如下:

r ← λ r + ( 1 − λ ) r n e w (2) \tag2 r \gets \lambda r + (1-\lambda)r_{new} rλr+(1λ)rnew(2)

由于矩阵 r r r 初始化成零矩阵,当前更新结果如下:

r(i \ k)ABCDE
A-2.00.5-0.5-1.5-2.0
B0.0-2.00.0-1.0-1.5
C-0.50.5-2.0-0.5-1.0
D-1.5-1.0-0.5-2.00.5
E-2.0-1.5-1.01.0-2.0

2.3 民意支持度矩阵 a

接下来,大家根据当前 r r r 提供的支持度结果,做进一步的决策调整。简单地讲,基本策略就是”批评与自我表扬“。虽然一开始大家都很谦虚,自我支持度设置成为一个较低的起点。但是,竞选已经开始了,每个人都需要找理由加强自我支持度,降低对其他人的支持度。所以后续步骤就是找理由增加对自己的支持度,降低对别人的支持度。

2.3.1 表扬自我

我们可以把候选人 k k k 对自己的支持度理解为候选人的自信心。初始阶段,自我支持度 r ( k , k ) r(k,k) r(k,k) 都是负值,呈现出完全没有自信心的样子。我们需要根据选民的投票意向,提升候选人的自信心。计算方法是,把矩阵 r r r 每一列中的正数累加起来保存在对角线 a ( k , k ) a(k,k) a(k,k) 的位置。公式如下:
a n e w ( k , k ) = ∑ i ′ ≠ k max ⁡ { ( 0 , r ( i ′ , k ) ) } (3) \tag3 a_{new}(k,k)=\sum_{i'\neq k}\max\{(0,r(i',k))\} anew(k,k)=i=kmax{(0,r(i,k))}(3)

这样我们得到了民意支持度矩阵 主对角线的值:

a_new(i \ k)ABCDE
A0.00.00.00.00.0
B0.01.00.00.00.0
C0.00.00.00.00.0
D0.00.00.01.00.0
E0.00.00.00.00.5

显然,候选人 B、D、E 找到了提升自我支持度的理由。

2.3.2 批评别人

接下来要找理由降低对其他人的支持度。当然这个理由应该优雅一些。主要原则如下:

  • 既然是降低对别人的支持度,这个增量必然不会是大于零的数值。
  • 也不能太过分,降低幅度尽量不要太多。

选民 i i i 对候选者 k k k 的支持度,会受其他选民支持度的影响。其影响程度包括两部分:

  • 候选者 k k k 自信心 r ( k , k ) r(k,k) r(k,k) 。候选者自信心很重要,后面我们会看到,候选人 k k k 自我支持度大于对其他人的支持度,也就是自己愿意投票给自己时,他才能成为聚类中心。
  • 其他选民 i ′ i' i 对候选者 k k k 的正的投票意向 ∑ i ′ ∉ { i , k } { max ⁡ ( 0 , r ( i ′ , k ) ) } \sum_{i' \notin \{i,k\}} \{\max(0,r(i',k))\} i/{i,k}{max(0,r(i,k))}

也就是说,如果 k k k 自己有信心,其他选民也都支持 k k k 。显然:

  • 如果二者之和大于零,也就是民意非常正面, i i i 就没有理由降低对 k k k 的支持度。
  • 如果二者之和小于零,也就是民意非常负面, i i i 就可以用这个结果作为对 k k k 支持度的增量。因为计算过程中采用 max ⁡ \max max 运算,可以说 i i i k k k 还是手下留情了,选择了较小幅度的负增量。

综上述,民意支持度矩阵 计算公式如下:

【表扬自我】:
a n e w ( k , k ) = ∑ i ′ ≠ k max ⁡ { ( 0 , r ( i ′ , k ) ) } (4) \tag4 a_{new}(k,k)=\sum_{i'\neq k}\max\{(0,r(i',k))\} anew(k,k)=i=kmax{(0,r(i,k))}(4)
【批评别人】:
a n e w ( i , k ) = min ⁡ { 0 , r ( k , k ) + ∑ i ′ ∉ { i , k } { max ⁡ ( 0 , r ( i ′ , k ) ) } } , i ≠ k (5) \tag5 a_{new}(i,k)=\min\{0,r(k,k)+\sum_{i' \notin \{i,k\}} \{\max(0,r(i',k))\}\},i \neq k anew(i,k)=min{0,r(k,k)+i/{i,k}{max(0,r(i,k))}},i=k(5)

按照上述公式,民意矩阵 a ( i , k ) a(i,k) a(i,k) 计算结果如下:

a_new(i \ k)ABCDE
A0.0-1.5-2.0-1.0-1.5
B-2.01.0-2.0-1.0-1.5
C-2.0-1.50.0-1.0-1.5
D-2.0-1.0-2.01.0-2.0
E-2.0-1.0-2.0-2.00.5

为防止矩阵 a a a 的更新幅度过大造成结果不收敛,引入阻尼系数 λ \lambda λ,控制更新幅度。一般取 λ = 0.5 \lambda=0.5 λ=0.5,更新公式如下:
a ← λ a + ( 1 − λ ) a n e w (6) \tag6 a \gets \lambda a + (1-\lambda)a_{new} aλa+(1λ)anew(6)
由于矩阵 a a a 初始化成零矩阵,当前更新结果如下:

a(i \ k)ABCDE
A0.0-0.75-1.0-0.5-0.75
B-1.00.5-1.0-0.5-0.75
C-1.0-0.750.0-0.5-0.75
D-1.0-0.5-1.00.5-1.0
E-1.0-0.5-1.0-1.00.25

2.4 决策矩阵 c

决策矩阵用来决定是否结束算法。决策矩阵 c c c 计算方法如下:

c ( i , k ) = r ( i , k ) + a ( i , k ) (7) \tag7 c(i,k)=r(i,k)+a(i,k) c(i,k)=r(i,k)+a(i,k)(7)

即综合考虑个人支持度和民意支持度。根据上述数据, c ( i , k ) c(i,k) c(i,k) 计算结果如下:

c(i \ k)ABCDE
A-4.0-0.5-3.0-4.0-5.5
B-2.0-3.0-2.0-3.0-4.5
C-3.0-0.5-4.0-2.0-3.5
D-5.0-3.0-3.0-3.0-1.0
E-6.0-4.0-4.00.0-3.5

决策过程如下:

  • 矩阵 c c c 对角线上大于零的元素对应的列为当前的聚类中心。
  • 循环到公式(1) 继续更新矩阵 r , a , c r,a,c r,a,c,如果聚类中心连续多次不发生变化(控制参数 convergence_iter,一般设为 15),则聚类结束。
  • 如果循环迭代次数超过最大迭代次数(控制参数 max_iter,一般设为 200),聚类结束,显示聚类失败。

上述的迭代计算结果列举如下,供大家参考:

c(i \ k)ABCDE
A-2.750.5-2.375-2.75-4.5
B-1.625-0.75-1.625-1.5-3.25
C-2.3750.25-2.75-0.75-2.5
D-4.125-1.25-2.125-1.0-0.5
E-5.125-2.25-3.1250.5-1.75
c(i \ k)ABCDE
A-1.718751.46875-1.28125-1.875-3.4375
B[-0.93750.96875-0.75-0.1875-1.75
C1.593751.0625-1.593750.0-1.5625
D-2.84375-0.25-0.906250.3750.0
E-3.84375-1.25-1.656250.875-0.4375

我们看到 B、D 成为聚类中心。上述循环重复 convergence_iter = 15 次,聚类中心都是 B、D,算法结束。

3. 问题和质疑

回答一下文章开头提的问题。

  • 问题1:亲人竞争: 记得台湾地区选举领导人,有一年本来蓝营占优势,但是中间杀出个宋楚瑜,分散了蓝赢得选票,导致本来处于弱势的绿营占了上风。如果一个部落内,有两个人获得的支持度相近,如何决定谁最终胜出呢?有没有对聚类的效果造成负面影响?

我设计了以下几个数进行聚类: { 1 , 2 , 3 , 4 , 11 , 12 } \{1,2,3,4,11,12\} {1,2,3,4,11,12},其中 2 , 3 2,3 2,3 都可以做前四个元素的聚类中心。迭代了 39 轮(convergence_iter = 15),终于给出收敛答案,聚类中心为: { 2 , 11 } \{2,11\} {2,11}

  • 问题2:选票分散: 如果某个部落内部,父亲投票给母亲、母亲投票给儿子,儿子投票给姐姐,姐姐投票给父亲,部落内每个人的票都不够多,会不会造成聚类失败?

我设计了如下数据集: { ( 1 , 1 ) , ( 2 , 1 ) , ( 1 , 2 ) , ( 2 , 2 ) , ( 111 , 112 ) , ( 112 , 111 ) } \{(1,1),(2,1),(1,2),(2,2),(111,112),(112,111)\} {(1,1),(2,1),(1,2),(2,2),(111,112),(112,111)},聚类结果: { ( 1 , 1 ) , ( 2 , 1 ) , ( 1 , 2 ) , ( 2 , 2 ) , ( 111 , 112 ) , ( 112 , 111 ) } \{(1,1),(2,1),(1,2),(2,2),(111,112),(112,111)\} {(1,1),(2,1),(1,2),(2,2),(111,112),(112,111)}

把数据加上随机扰动: { ( 1.1 , 1.3 ) , ( 2.2 , 1.4 ) , ( 1.01 , 2.22 ) ( 2.13 , 2.12 ) , ( 111.31 , 112.12 ) , ( 112.24 , 111.37 ) } \{(1.1,1.3),(2.2,1.4),(1.01,2.22)(2.13,2.12),(111.31,112.12),(112.24,111.37)\} {(1.1,1.3),(2.2,1.4),(1.01,2.22)(2.13,2.12),(111.31,112.12),(112.24,111.37)},聚类结果为: { ( 22.13 , 2.12 ) , ( 111.31 , 112.12 ) } \{(22.13,2.12),(111.31,112.12)\} {(22.132.12),(111.31,112.12)}

可以看出,第二个问题从理论上无法解决。随机数据扰动的结果表明,真实应用情况下,不会出现这类极端结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法 的相关文章

  • baseDeltaSeconds PROPAGATION_DELAY_SECS 设置传播延迟时间

    设置lotus传播延迟 默认区块传播延迟10秒设置环境变量参考 xff1a 默认区块传播延迟10秒 span class token string 34 baseDeltaSeconds 34 span span class token p
  • 一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

    这篇博客发出来后 xff0c 我用 Rust 复现代码出现问题 为此 xff0c 我对对照了 sklearn 的相关代码 xff0c 反复比较了两天 xff0c 发现一处 bug xff0c 把 43 61 误写成了 61 xff0c 导致
  • spring事务相关配置之propagation

    文章目录 1 概述2 环境准备2 1 spring整合mybatis2 2 数据库准备2 2 1 account表2 2 2 log表 2 3 创建dao service并开启spring事务2 3 1 AccountDao2 3 2 Lo
  • Javascript 与 jQuery:单击和双击同一元素,不同的效果,一个禁用另一个

    我有一个有趣的情况 我有一个表行 当前 当我单击 展开 按钮时 它显示它的隐藏对应项 包含展开按钮的原始 未隐藏 行在某个单元格中也有一些内容 单击该单元格后 这些内容将变为可编辑 我想摆脱扩展按钮 并通过双击行本身的任意位置来扩展行 包括
  • 使用 C# 设置 CPU 的关联性

    我已经用 C 创建了一个窗口应用程序 现在我想设置该应用程序的 CPU 亲和力 我可能有 2 个处理器 4 个处理器 8 个处理器或可能超过 8 个处理器 我想使用接口的输入来设置 cpu 关联性 我怎样才能做到这一点 如何使用Enviro
  • 支持传播的 Spring 事务

    我想了解 Spring 事务与传播支持的用途 java 文档提到 如果该方法具有 Transactional propagation Propagation SUPPORTS 从事务内部调用它支持事务 但如果不存在事务 则该方法将以非事务方
  • Spring事务传播REQUIRED,REQUIRES_NEW

    在下面的代码方法中doService1 更新正确的sql但是doService2 sql 有一些问题 但是当我打电话时doService 它必须承诺doService1 更新到数据库 即使doService2 has a sql excep
  • 在 TensorFlow 中使用多个 CPU 核心

    我广泛研究了有关 TensorFlow 的其他答案 但我似乎无法让它在我的 CPU 上使用多个内核 根据 htop 的说法 以下程序仅使用单个 CPU 核心 import tensorflow as tf n cpus 20 sess tf
  • 如今,设置线程亲和性而不是将其留给操作系统的充分理由是什么?

    在这里搜索 线程亲和力 的答案 我看到很多人对此感兴趣 但除了可能获得稳定的 QueryPerformanceTimer 结果之外 没有什么理由 假设有一个现代操作系统和一个带有现代 4 6 核 CPU 的现代 2 4 插槽工作站 服务器类
  • Python 多线程/多处理和限制 CPU 核心关联性

    在Python中 您可以创建新的线程和进程来运行给定的任务multiprocessing Pool multiprocessing ThreadPool concurrent futures ProcessPoolExecutor and
  • 如何保证进程运行在特定的物理CPU核心和线程上?

    这个问题 https stackoverflow com questions 4664668 how to force two process to run on the same cpu询问确保两个进程在同一 CPU 上运行 使用sche
  • 如何设置程序的CPU亲和力?

    我有一个用 C 编写的程序 我使用 VSTS 2008 Net 3 5 Windows Vista Enterprise x86 来开发 Windows 窗体应用程序 我当前的计算机是双核CPU 我想将程序的CPU亲和力设置为在特定CPU上
  • 是否可以在 OS X 中设置 pthread CPU 关联性?

    In Linux有一个sched setaffinity 函数定义在sched h 但我似乎找不到类似的东西Mac OS X 10 6 pthreads实现 如果无法设置亲和力 则默认策略是什么OS X Mac OS X 有线程亲和性API
  • 如何为Python 3子进程分配CPU亲和力?

    我在 Python 方面还是个新手 我在 Windows 7 和 Windows 10 上运行 Tkinter GUI 我有一个子进程以 1 KHz 运行数据记录器例程 我想为子进程设置 cpu 亲和力 我正在使用 Python 3 8 进
  • 创建线程之前的 Pthread 亲和性

    在创建线程之前 我需要设置亲和力 线程到核心 例如 第一个线程到第一个核心 就像是KMP AFFINITY in OpenMP 是否可以 编辑 我以这种方式尝试 但不起作用 void DoWork void args int nr int
  • VB.net 进程亲和力

    Goal 我的目标是将所有正在运行的进程的亲和力设置为 1 个核心 然后启动一个具有所有核心亲和力的程序 技能等级 总的来说 我的编程技能水平几乎是初学者 这是我的第一语言 Need 我想要一些有关此编码的帮助 也许还需要一篇文章或代码描述
  • 为什么使用任务集在一组独立的内核上运行多线程 Linux 程序会导致所有线程在一个内核上运行?

    期望的行为 在一组已使用隔离的内核上运行多线程 Linux 程序isolcpus 这是一个小程序 我们可以用作多线程程序的示例 include
  • 使用 OpenMP 在两个内核上设置线程关联

    我使用的是C程序 在Windows7上用gcc 4 9 2编译 使用OpenMP 4 0 我的电脑是双核 四个线程 我想使用线程亲和力传播并使用放置在不同核心上的 2 个线程 因此 当我从 DOS 设置环境变量时 设置 OMP NUM TH
  • HTML LocalStorage 中的数据在其他窗口/选项卡中可用所需的时间

    我有一个使用 HTML LocalStorage 的网页 同时打开此页面的多个选项卡 窗口是很常见的 由于这些都使用相同的 LocalStorage 并且 LocalStorage 不提供事务或类似功能 因此我想实现某种形式的互斥 以防止不
  • 在 gdb 中设置应用程序关联

    有没有一种简单的方法可以设置我正在调试的应用程序的亲和力 而无需将 gdb 锁定到同一核心 我问的原因是应用程序以实时优先级运行 并且需要在单核上运行 目前我使用这个命令行 taskset c 3 gdbserver 1234 app ou

随机推荐

  • Rust: 函数的重载——我做的的一组小实验

    编程的时候 xff0c 我发现有不少函数能够根据左值类型自动调用重载函数 但是 xff0c 我知道 Rust 的函数是不支持重载的 所以我打算尝试一下这一 重载 现象是如何实现的 一 Rust 不支持函数重载 写一段代码 xff1a spa
  • php产生大量session文件导致报错无法创建修改文件:no space left on device

    阿里云SLB健康检测后端服务器组产生百万级别的php的0k大小session文件 今天早上在登录公司一台阿里云的服务器上vim修改配置文件以及touch文件时报错 xff1a no space left on device df h 查看了
  • Rust: Native Windows GUI下载、安装、演示入门

    上 github 下载 xff0c 网址为 https github com gabdube native windows gui 上面有安装说明 按说明方法 xff0c 老是提示权限不够 配置了 ssh 公钥证书 xff0c 仍然不行 请
  • Rust: Native Windows GUI 入门第一课,程序结构剖析

    基于派生宏的代码实例 Cargo toml 文件 span class token punctuation span package span class token punctuation span name span class tok
  • 通过两个神经元的极简模型,清晰透视 Pytorch 工作原理

    解剖麻雀 xff0c 是分析了解复杂问题的好办法 本文通过搭建只有两个神经元的网络 xff0c 从根本上剖析 Pytorch 工作原理 先附上全部源代码 xff0c 然后听我慢慢唠 xff01 span class token keywor
  • Cifar-10 数据格式分析

    Cifar 10 的介绍可去官网阅读 xff0c 也可参照我之前整理的 笔记 xff1a CIFAR 01 和 CIFAR 100 数据集内容和格式详解 1 下载 Cifar 10 数据 本文下载了 Cifar 10 的 Python 语言
  • 准确率(Accuracy)、精度(Precision)、召回率(Recall)和 mAP 的图解

    机器学习的评价指标让人眼花缭乱 以前我写过一篇笔记总结了这个话题 xff0c 有兴趣的可以参考一下 xff1a 一分钟看懂深度学习中的准确率 xff08 Accuracy xff09 精度 xff08 Precision xff09 召回率
  • conda 基本用法

    好久不用超算服务器了 xff0c 今天远程登陆一下 xff0c 发现以前写的代码都不能运行了 鼓捣半天 xff0c 忽然想起来 xff0c 需要设置 conda 环境才行 写此小结 xff0c 汇总一下 conda 的基本用法 很久以前安装
  • jupyter 基本用法

    前一段时间 xff0c 同事帮我在超算服务器安装了一套 jupyter notebook 软件 xff0c 甚是好用 但用了几天后 xff0c 忽然就不能用了 今天研究了一下 xff0c 发现是服务器程序关闭了 xff0c 所以我在浏览器端
  • pytorch模型的保存与加载

    torch save 与 torch load 模型保存有两种形式 xff0c 一种是保存模型的 state dict xff0c 只是保存模型的参数 那么加载时需要先创建一个模型的实例 model xff0c 之后通过 torch loa
  • 用 SDK Mamager 安装 Nano

    用 SDK Mamager 安装 Nano 一 安装 sdk manager 在 PC 机上 Ubuntu 环境下 xff0c 下载 sdk manager 安装包 xff0c 用鼠标点击后自动运行 界面上有 Install 字样 xff0
  • TensorRTx 开源代码内容说明

    TensorRTx 提供了把常见网络模型转化为 TensorRT 格式的功能 TensorRTx旨在使用tensorrt网络定义API实现流行的深度学习网络 tensorrt有内置的解析器 xff0c 包括caffeparser uffpa
  • 关于在ubuntu下用docker部署Django卡在 Watching for file changes with StatReloader 不动了 以及 run后无法访问web 的问题

    1 问题描述 xff1a 用docker部署Django时遇到问题如下 xff1a 卡在这里不动了 xff0c 等了半小时服务也没起来 我的dockerfile如下 xff1a 直接启动没有问题 xff1a 用exec命令在容器内直接起也没
  • 漫话线性代数:线性变换的几何解释

    网购了一本书 xff0c 说的是线性代数的几何解释 一口气读完 xff0c 感觉这部书有些贪多了 xff0c 什么细节都要弄个几何解释 xff0c 不免让琐碎的细节把关键性的主题给遮掩了 所以萌生一个念头 xff0c 把线性代数的核心概念和
  • ChatGPT 逆天测试,结局出乎预料

    目录 一 数学解题能力二 编程能力三 日常生活咨询四 问一些离谱的问题 xff0c 它有啥反应 xff1f 五 逆天大测试 一 数学解题能力 据说 ChatGPT 会做数学题 xff0c 给他几个条件不充分的问题 xff0c 看看他是否真的
  • 我发现 chatGPT 在智能客服方面一个逆天的应用呀

    chatGPT 有助于快速构建知识库 xff0c 想了一个有趣的例子 xff0c 感觉 chatGPT真是强大呀 xff01 废话不多讲 xff0c 直接看效果吧 xff1a
  • 在 WIndows 下安装 Apache Tinkerpop (Gremlin)

    一 安装 JDK 首先安装 Java JDK xff0c 这个去官网下载即可 xff0c 我下载安装的 JDK19 xff08 jdk 19 windows x64 bin msi xff09 xff0c 细节不赘述 二 去 Tinkerp
  • 阅读笔记:TF - IDF 原理

    今天查阅 TF IDF 资料 xff0c 发现百度百科里面提供了一个例子 xff0c 解释的很清楚 xff0c 记下来备用 原文链接 xff1a https baike baidu com item tf idf 8816134 fr 61
  • 词向量语义匹配:欧氏距离和余弦相似度,选择哪一个?

    最近做自然语言处理算法 xff0c 需要根据词向量判断两个词汇的相似度 面临两个选择 xff1a 欧氏距离和余弦相似度 选择哪一个好呢 xff1f 一 概念图解 为便于理解这个问题 xff0c 假设词向量是二维的 我们分析一下这两种方法计算
  • 一分钟理解 AP(Affinity Propagation) 亲和⼒传播算法

    这篇博客发出来后 xff0c 我用 Rust 复现代码出现问题 为此 xff0c 我对对照了 sklearn 的相关代码 xff0c 反复比较了两天 xff0c 发现一处 bug xff0c 把 43 61 误写成了 61 xff0c 导致