内容范围如题。Lec 08-11的内容:https://www.youtube.com/watch?v=Qa04kw1gKHk&index=36&list=PLQiVpyxVlLkbpeXN-HvANQf-txsqjlAeL

From: http://blog.sina.com.cn/s/blog_461db08c0101jv5j.html

几个要点:

关于变量消减的顺序,其思想可以参考算法中的矩阵相乘的顺序对计算效率的影响,采用动态规划法。


8 Inference: Variable Elimination

8.1 Overview: Conditional Probability Queries
  1. 如果我们想利用PGM算某个概率,Koller告诉我们,这也是NP-hard,那也是NP-hard,反正很困难就对了。但好在这只是worst case,一般情况下,可以找到简便的方法。
  2. Sum-product。比如我们想求变量J的概率,我们要把网络内所有的变量的factor求product,得到所有变量的联合概率,然后把除J之外的变量求和,得到J的边缘分布,就是J的分布了。
  3. Evidence:Reduced Factors。如果我们已知了E=e(就是所谓的Evidence),再来求Y的概率,所以我们求的是条件概率P(Y|E=e)。这个概率等于P(Y,E=e)/P(E=e)。分母用刚才的方法求。求分子的时候,要把所有包含E的factor删去不等于e的条目,然后在用刚才的方法求就行了。
  4. 在上面的方法中,求联合概率的那一步,如果除target变量和evidence变量之外还有很多变量,那就难求了,因为复杂度是成指数形式增长的。
  5. 最后,介绍了一些解概率的算法:如动态规划,置信传播,Variational Approximation,蒙特卡洛,Importance Sampling。
8.2 Overview: MAP Inference
  1. Maximum a Posteriori(MAP)。最大后验估计。给定E=e,求除E意外所有变量的值Y=y,使得P(y|e)最大。解可能不是唯一的。
  2. MAP != Max over Marginals。不能单独看某个变量的边缘分布来决定这个变量的解,而要看所有变量的联合概率哪个最大。
  3. NP-hardness。XXXX等情况,又是NP-hard。但大部分情况下还是能解的。
  4. Max-Product。后验概率P(Y|E=e)= P(Y,E=e)/P(E=e)。我们的目的是求Y使得P最大。分母与Y无关,所以只用看分子了。分子是E=e条件下的联合概率,等于是Reduced Factors的乘积,然后归一化。其实归一化因子也与Y无关,所以只用看Reduced Factors的乘积就行了。
  5. Algorithm:MAP。有很多算法可以利用:Variable elimination,置信传播,整数规划,图割法等等。
8.3 Variable Elimination Algorithm
  1. 这一节就是具体讲怎么算上一节提到的后验概率。
  2. 第二个问题答案是C,为什么不是D?

8.4 Complexity of Variable Elimination

  1. 这一节主要讲Variable Elimination的复杂度问题。复杂度的衡量标准有计算中包括多少个乘法,多少个加法。然后得出结论:乘法的个数将随factor的个数成指数形式增长,这就是Exponential Blow Up。
  2. 所以在做Variable Elimination时,variable的先后顺序就会对复杂度有很大影响。
8.5 Graph-Based Perspective on Variable Elimination
  1. 如何决定variable的顺序呢?这一节从Graph的角度来解决这个问题
  2. 首先把有向图变成无向图,给存在V-structure的两个父节点建立edge(这一步骤叫做“伦理教育”,因为既然生了孩子就要结婚)。这就得到了Induced MN。
  3. 在Elimination的过程中,会出现Factor同时包含两个并没有相连的variables,这时我们要给这两个Variable加上edge。这就叫fill edge
  4. Induced Graph。加入了fill edge的Graph就叫做Induced Graph,用I表示。I有两个下标phi & alpha。Phi表示所有的factors,Alpha表示消除(Elimination)的顺序。
  5. Cliques in the induced graph。在VE(variable elimination)中产生的每个factor都是induced graph中的一个clique。clique的定义是:最大全连接的sub-graph of the induced graph。“最大”是指无法再添加variable到clique中还保证sub-graph是全连接的,“全连接”是指每个variable都和其他variable有连接。在Koller的例子中一共有5个Clique,它们恰好是每次VE所产生的factor。接着,Koller还证明了一下为什么“恰好”是这样的。
  6. Induced Width。一个Induced Graph的width,等于其中最大的clique所包含节点的个数减1。至于为什么要减1,没啥理由,就是这么定义的。Minimum Induced Width是指一个Induced graph的最小Induced width(因为VE的顺序不同,Induced width也不同)。能够产生Minimum Induced Width的VE顺序就是计算效率最高的顺序。

8.6 Finding Elimination Orderings

  1. 定理:判断一个Graph的Minimum Induced Width是否小于等于K。这个问题是NP-complete的。这和inference的NP-hardness是无关的。
  2. 所以我们要用一些求近似解的方法。Greedy search是不错的方法。每次选择一个Variable消除,不考虑后续的反应。这需要用启发式的cost评价函数,例如:选择Neighbor最少的消除,或选择值域空间最少的variable消除,或选择fill edge最少的消除,或选择fill edge(带权重)最少的消除。
  3. 定理:一个Induced Graph必须是三角形化的,即Graph中不可能有3个节点以上的空心loop。这个理论可以帮我们找出VE的顺序,但是俺没理解
  4. Koller举了一个机器人的例子说明几种VE的策略的计算量是差别很大的。

9 Inference: Belief Propagation, Part 1

9.1 Belief Propagation
  1. VE的运算量太大,还有另一种求解方式,即Belief Propagation。
  2. Cluster Graph。Cluster Graph中的没一个节点叫做一个Cluster,表示MN中variable的一个子集。而MN中的variable则变成了Cluster Graph中的边(edge),这里叫做Sepset。Sepset是由它连接的两个Cluster的共同话题。
  3. 信息传播开始时,信息delta=1。下一轮迭代时,传播的信息变为Cluster自己的信息乘以它从邻居(除了将要接受信息的那个Cluster)那里得到的信息,然后看接受信息的Cluster关心哪个Variable,就对那个Variable求边缘分布,然后传递出去。
  4. 如何建立Cluster Graph?首先,如何选择Cluster包含哪些Variable(这里Koller没讲,下一节的Bethe Cluster Graph会讲)。其次Cluster的factor(Psi)该是多少?这就需要把原来MN中的factor(Phi)乘进Psi里。每个Phi只能放进一个Psi里,条件是这个Psi包含了Phi的所有Variable,如果有多个符合条件的Psi,只能选一个放进去。如果某个Psi没有一个Phi放进去,那这个Psi还保留初始值1。
  5. Koller举了两个Cluster Graph的例子。例子中Cluster没有变,只是连接它们的Sepset变了。下一节中,Koller会证明其中一个是illegal的
  6. Belief Propagation Algorithm。方法就是上面提到的。但是有两个问题:1.什么时候停止迭代?这个接下来会讲。2.如何选择信息传递的edge?这个简单,就是按照一定的顺序就行了。比如Round Robin(循环赛)策略,其实就是轮流迭代。
  7. Belief Propagation Run。置信传播的方法好不好?它并不能得到精确地解,但是复杂度比NP-hard要好。

9.2 Properties of Cluster Graphs

  1. Family preservation Property。对于每一个原来MN中的factor,都要有一个Cluster可以包含他。
  2. Running Intersection Property。假设有两个Cluster都包含同一个variable,那么这两个Cluster之间必须有唯一的连接渠道使该variable的信息可以通过。所谓"唯一"的连接,是指sepset不能构成loop(或者说这个路径必须是一个tree)。否则variable的信息通过两条渠道分别传播,就会被重复考虑了。实际上,即使没有loop,也不能完全消除variable被重复考虑。因为一个variable的信息可以在通过cluster的时候转换成另一个variable的信息,然后传递回自己,这样信息仍然会被重复考虑。
  3. Bethe Cluster Graph。这种graph有两种cluster:大cluster包含原MN中的一个factor,小cluster包含原MN中的一个variable。然后把它们相互连接。这种graph的好处是很容易建立,而且大cluster通过小cluster传递信息时,variable之间的相关性被消除(这算好处吗?)

10 Inference: Belief Propagation, Part 2

10.1 Properties of Belief Propagation
  1. Calibration。首先复习一下Cluster Belief是什么东东(之前讲过吗?)。Cluster Belief等于该Cluster的factor(Psi)乘以进入该Cluster的信息,用Beta表示。如果两个相邻的Cluster对于他们的Sepset的信息(也就是对他们求Sepset的边缘概率)一致,那么我们就说这个Graph是被Calibrated。
  2. Convergence->Calibrated。edge的两端传递的信息相同,所以再迭代下去也不会改变Graph的信息分布。
  3. Sepset Belief。即是Sepset两个方向传递的信息相乘。用Mu表示。
  4. Reparameterization。如果我们把所有Beta的乘积除以所有Mu的乘积,会得到所有Psi的乘积,也就等于所有Phi的乘积,也就是这个Graph表达的概率分布的Un-normalized measure。所以用Belief Propagation方法并没有损失任何信息,而且把问题转换成了容易解的方式。

10.2 Clique Tree Algorithm - Correctness

  1. 这一节讲的是Cluster Graph的一种特殊情况:信息不再在整个Cluster Graph里面传播,而是在Clique Tree里面传播。这种情况下,BP算法不但收敛更加迅速,而且能够得到精确解。
  2. Message Passing in Trees。
  3. Correctness。Cluster的Belief用Beta表示。Beta等于其本身的Psi乘以相邻元素传过来的Delta。而Delta又等于相邻Cluster的Psi乘以别的Delta。最后可以把所有的Delta都展开成Psi的乘积。这时我们会发现Beta实际上等于一堆Psi的乘积(还有求和)。这跟我们用factor计算边缘分布的形式是一样的。所以这样就证明了结果的正确性。
  4. Clique Tree(不记得Clique是什么了都)。定义:首先它是一个无向树(Tree就是没有Loop的Graph)。它的节点是Cluster。连接节点的边就是Sepset。(Clique Tree 就是Cluster Graph的一种特殊形式)
  5. Family Preservation。由于Clique Tree是特殊的Cluster Graph,所以Family Preservation的性质(9.2.1节)它也要符合。
  6. Running Intersection。这也是9.1节中的性质,同样要符合。
  7. Clique Tree Message Passing。这就是举了一个例子。
  8. RIP(Running Intersection Property) -> Clique Tree Correctness。用前面证明Correctness的方法可证明:Running Intersection Property保证了正确性!
10.3 Clique Tree Algorithm - Computation
  1. Message Passing in Trees。在Koller举得例子中,Tree实际上就是一个Chain。而两端的元素所传出的信息是不随迭代而变化的。也就是说,两端元素的输出信息从一开始就已经收敛了。而端点的元素吧信息传递给下个元素以后,下一个元素也收敛了。以此递推,整个Graph会在向左向右两次迭代之后收敛。
  2. Convergence of Message Passing。Tree的叶子节点上的元素从一开始就是收敛的。所以我们可以从叶子节点开始向内部传播。如果选择的顺序合适,最少经过2(K-1)次pass,整个tree就会收敛。其中K是元素的个数。
  3. Message Passing Order。我们可以从叶子节点出发,把信息向内传播一步。然后挑出符合收敛条件的节点,再传播一步……直到所有节点都收敛为止。(这种方法可以保证所有的Graph都适用吗?)
  4. Answer Queries(这一步是在收敛后进行的吗?)。如果我们想知道一个Variable(或者同一个Clique中的多个Variable)的后验概率分布,我们要选一个包含这些Variable的Clique,把其他不需要的Variable加起来求边缘概率。当然,求出来的是未归一化的边缘概率,还需要归一化才行(怎么归?)。
  5. 如果我们已经观察到了其中一些Variable的值Z=z,可以以此为基础,再求其他Variable(用X表示)的概率,这叫做increamental inferrence。这要分两种情况。如果X和Z在同一个的Clique里,这比较简单,只要做Clique Reduction就行了。就是把Z!=z的部分去掉,求和,归一化。如果X和Z不在同一个Clique里,情况稍复杂一些。因为我们观察到了Z,所以包含Z的clique信息变化了,需要把这个信息传递到包含X的Clique里。但只需要传递从Z到X之间的路径就可以了。
  6. Summerize。用Clique Tree的方法,只用传递2(K-1)次就可以得到所有的概率。而相比之下,用Variable Elimination的方法算的话,就慢很多了。所以我们只用2倍于VE的计算量,而不是N倍,就完成了计算(这里是啥意思,不懂)
10.4 Clique Tree and Independence
  1. Clique Tree可以快速的计算出Variable的边缘概率,但理论上这个问题又是NP-hard的。那肯定有某种情况是Clique Tree也不能应付的。
  2. RIP(Running Intersection Property) and Independency。首先,我们定义如下概念:W<(i,j),只出现在i侧的Variables;W<(j,i),只出现在j侧的Variables;还有剩下的两边都出现的Variable,也就是Sepset(ij)里的Variable。
  3. 定理:一个Clique Tree符合RIP,当且仅当W<(i,j)与W<(j,i)独立,在给出S(ij)时。
  4. Koller又举了两个例子来说明,在特定情况下,这个问题是NP-Hard的。
10.5 Clique Trees and VE
  1. 那么我们如何来构造一个Clique Tree呢?我们首先看如何用Clique Tree的视角去看VE。
  2. VE的步骤是怎么样的?1.每一步会产生一个大的factor lamda(i);2.然后做VE使lamda(i)缩减成tau(i);3.用tau(i)去计算下面的lamda(i)。
  3. 用Clique tree的视角去看,每个lamda就是一个clique,而tau则是clique之间传递的message。
  4. Example。这个例子展示了如何用VE的方法构造clique tree。要点在:VE之后有一步post process,如果相邻的两个Clique有包含关系,需要把较小的合进大的里面。
  5. 构造出的这个graph到底是不是Clique tree呢?首先,它是一个tree。每个tao只用到一次,所以信息只是一对一的传播(什么玩意?)。其次,这个tree是family preserving的(9.2.1)(这里也不明)。第三,它还有RIP性质(9.2.2)
  6. Running Intersection Property。定理:VE产生的Cluster tree都有RIP性质。
  7. Summery。VE可以生成正确的Clique tree。所以我们可以模拟VE(只选择variable的顺序,不做乘法运算)来生成Clique tree。Clique tree的运算量和VE的运算量相等。这样看似乎没什么优势,但是我们想获得所有variable的边缘分布时,clique tree的优势就显现出来了。因为它可以用动态规划的方法使计算所有variable的运算量只相当于计算两次VE。

10.6 BP In Practice 

  1. Misconception Revisited。BP的最坏情况会发生在:1.紧密的闭环网络;2.强Potential;3.矛盾的信息。在这种情况下收敛会非常慢。
  2. Different Variants of BP。Synchronous BP,同步的BP,所有Variables同时BP。这种方法收敛会比较慢,尽管它的实现会比较简单,而且适用于并行计算。Asynchronous BP,非同步的BP。Variable依次做BP,这会加快收敛的速度,同时提高收敛的程度。但如何选择BP的顺序呢?下一节再讲。
  3. Observation。1.收敛是局部的概念,有些信息收敛很快,有些却怎么也收敛不了。2.非同步比同步的好。3.非同步BP的顺序很重要。
  4. Informed Message Scheduling。Tree reparameterization(TRP),选一个Tree进行BP,再选一个Tree进行...。还有一种Residual belief propagation(RBP),每次在最不agree的两个cluster间BP。
  5. Smoothing (Damping) Messages。每次传递信息时留一些余地,避免信息过快的变化。这样可以避免震荡。可以大幅提高收敛的程度。
10.7 Loopy BP and Message Decoding
  1. 一个很有趣的应用是将Loopy BP和Message Decoding这两个看似无关的东西联系在一起。
  2. 讲了一段历史,心情不好,没怎么注意听。

11 Inference: MAP Estimation

11.1 Max Sum Message Passing
  1. 这一节突然转变话题,反过来倒过去看了好几天才弄明白过来。
  2. 到目前为止,我们都是在讨论如何计算边缘概率,但另外还有一种很有价值的问题是:如何找出一个联合概率最大的variable的组合。很显然,我们不能把边缘概率最大的variable组合到一起,我们需要一种不同的算法去解决这个问题。
  3. Product->Summation:首先,我们需要把乘法转变成加法。这需要我们把factor都转变为log的形式。(这个转换之前的计算也适用,为什么现在才提出来?)
  4. Max-Sum Elimination in Chains:我们可以像VE那样每次eliminate一个variable。使之变成一个不包含此variable的中间变量lambda。
  5. Factor Summation:和sum-product算法类似,只是把product变为summation。
  6. Factor Maximization:还是和sum-product算法类似,只是把sum变成了max,在Eliminate一个variable的时候不是把相应的factor加起来,而是去最大的那个。这个过程又叫做max-marginalization
  7. Max-Sum Elimination in Chains:继续之前的过程,当我们Eliminate到只剩下一个Variable E的时候,这时候的lambda就代表了:E取e时,可能出现的最大的联合概率。
  8. Max-Sum in Clique Tree:用Max-Sum代替Sum-Porduct在Clique Tree的信息传递中也是一样的。
  9. Simple Example:这个例子很好,很清晰。
  10. Max-Sum BP at Convergence:我们该如何判断BP已经收敛了呢?每个Clique的信息都在表达其所包含变量的max-marginals。而且clique tree此时会有所谓的calibration property,即是相邻的clique之间要对sepset中的variable的max-mariginal信息要一致。
11.2 Finding a MAP Assignment
    1. 上一节我们只讨论了如何获得max-marginal,而没有讨论如何得到MAP Assignment(即最大的联合概率对应的各个variable的值)。
    2. 这其实很简单,只需要在每个Clique中挑出最大的概率对应的variable值就可以了。但如果Clique中有几个概率相同的最大概率该如何处理呢?有两个方法:1.对概率做一点扰动,使最大值变成只有一个;2.先在第一个Clique中选一个最大概率(随便选一个就行),然后记住选了哪个值,再在下一个Clique中的对应值中选一个最大概率……。

关于置信传播算法(Belief Propagation)的一些理解与记录

马尔科夫随机场

马尔科夫随机场是一种特殊的贝叶斯网络,网络中的节点满足马尔科夫性质:某个节点的概率分布特性只与其领域内的点有关,与领域外的点无关。在这种领域模型中,随机场中的每一个节点只与它直接相邻的节点有相互作用。

马尔科夫随机场是一个无向图,其中的节点分为:

可观察节点(已知数据)y和 隐藏节点(未知量)xi

可观察节点与隐藏节点之间的相互作用因子用一个似然函数Φi(xi,yi)表示,

两个相邻(有边连接)的隐藏节点之间的相互作用因子用势能量ψi,j(xi,xj)表示。

一个马尔科夫随机场中所有节点的联合概率分布函数为:

对于大多数较小的马尔科夫随机场,只要简单地对全概率公式采用求和或积分的方法,就可以求得每个隐藏点的边缘概率分布。但对于节点数很大的马尔科夫随机场,计算量以指数级增长。所以必须引入适当的计算方法,如置信传播算法

置信传播

主要思想是:对于马尔科夫随机场中的每一个节点,通过消息传播,把该节点的概率分布状态传递给相邻的节点,从而影响相邻节点的概率分布状态,经过一定次数的迭代,每个节点的概率分布将收敛于一个稳态。为了使用置信传播算法,在马尔科夫随机场中定义了两个概念:消息和置信度。

消息更新规则:

置信度计算:

用置信传播算法求出的某点的置信度,就是该点的边缘概率分布

      虽然可能不是准确值,但至少是近似值。随着马尔科夫随机场的增大,计算量只以线性级增长。要使马尔科夫随机场边界点的信息最终能够到达另一个边界,理论上迭代次数应该为马尔科夫随机场两个边界之间的距离。计算量远小于暴力算法。

消息的计算往往有先后关系,但在实际的网状马尔科夫随机场中,常常采用迭代式计算,即,

先为每一个消息赋予初始值,计算的时候不用从起始节点沿着所有的边一层层地下去寻找边缘节点进行递归运算,而是

随机找到某个点和它的邻居节点,计算它发送给邻居节点的消息,并计算邻居节点的置信度;

然后再随机找到某个点,重复上面过程。每一次的迭代都使用上一次迭代后的值进行计算。这种迭代式运算法,方便利用计算机编程实现,且有利于并行运算,提高效率。

置信传播算法流程

根据信息更新规则分类,置信传播算法分为:Max-productSum-product

对于Sum-product,算法流程如下:

① 初始化所有隐藏节点的似然函数Φi(xi,yi)、每对邻居节点的势能量ψi,j(xi,xj)和消息mi,j(xj),其中,似然函数和势函数的初始化依赖于对问题的理解。

②随机找到某个点和它的邻居节点,用消息更新规则计算该节点发送给其邻居节点的所有消息,然后再随机找到某个节点,重复这个过程,当所有消息都更新一遍之后即完成一次迭代。

即,

③ 按照指定次数进行第②步的算法迭代,或判断消息是否收敛,若算法已经收敛,则开始计算每个节点的置信度。

即,

④ 由置信度求出使得每个节点的边缘概率分布取得最大的变量。

        

[PGM] Variable elimination and Belief propagation的更多相关文章

  1. 本人AI知识体系导航 - AI menu

    Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯   徐亦达老板 Dirichlet Process 学习 ...

  2. 机器学习&数据挖掘笔记_20(PGM练习四:图模型的精确推理)

    前言: 这次实验完成的是图模型的精确推理.exact inference分为2种,求边缘概率和求MAP,分别对应sum-product和max-sum算法.这次实验涉及到的知识点很多,不仅需要熟悉图模 ...

  3. PGM学习之一

    一 课程基本信息 本课程是由Prof.Daphne Koller主讲,同时得到了Prof. Kevin Murphy的支持,在coursera上公开传播.在本课程中,你将学习到PGM(Probabil ...

  4. 机器学习&数据挖掘笔记_21(PGM练习五:图模型的近似推理)

    前言: 这次练习完成的是图模型的近似推理,参考的内容是coursera课程:Probabilistic Graphical Models . 上次实验PGM练习四:图模型的精确推理 中介绍的是图模型的 ...

  5. PGM:概率图模型Graphical Model

    http://blog.csdn.net/pipisorry/article/details/51461878 概率图模型Graphical Models简介 完全通过代数计算来对更加复杂的模型进行建 ...

  6. 概率图模型(PGM)综述-by MIT 林达华博士

    声明:本文转载自http://www.sigvc.org/bbs/thread-728-1-1.html,个人感觉是很好的PGM理论综述,高屋建瓴的总结了PGM的主要分支和发展趋势,特收藏于此. “概 ...

  7. Expectation Propagation: Theory and Application

    原文:http://dongguo.me/blog/2014/01/01/expectation-propagation/ 简介 第一次接触EP是10年在百度实习时,当时组里面正有计划把线上的CTR预 ...

  8. PGM学习之五 贝叶斯网络

    本文的主题是“贝叶斯网络”(Bayesian Network) 贝叶斯网络是一个典型的图模型,它对感兴趣变量(variables of interest)及变量之间的关系(relationships) ...

  9. {ICIP2014}{收录论文列表}

    This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...

随机推荐

  1. Linux的SSH免密登录认证过程研究

    一.先看下SSH免密登录使用到的工具和生成的文件 工具:ssh-keygen用于生成秘钥文件,其中秘钥分为公钥和私钥.ssh-copy-id用于复制公钥文件到被控制机. 文件:ssh-keygen生成 ...

  2. AngularJS中使用$http对MongoLab数据表进行增删改查

    本篇体验使用AngularJS中的$http对MongoLab数据表进行增删改查. 主页面: <button ng-click="loadCourse()">Load ...

  3. 八幅漫画理解使用 JSON Web Token 设计单点登录系统

    原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家 ...

  4. Vert.x入门教程之Hello World

    http://blog.csdn.net/caihuangshi/article/details/51648182

  5. C# 6 的新特性~

    原文地址 Mads Torgersen,微软 C# 程序管理者,它发布了一个视频,描述即将到来的下一个 C# 版本--C# 6.在 C# 6 的新特性之间,Mads 主要提到了 getter-only ...

  6. dubbo服务启动的方式

    dubbo服务启动的方式: 1.dubbo自带的脚本, 2.直接用main方法启动dubbo的spring容器,参见dubbo-test里的各个例子 3.dubbo的spring boot start ...

  7. python3用BeautifulSoup用limit来获取指定数量的a标签

    # -*- coding:utf-8 -*- #python 2.7 #XiaoDeng #http://tieba.baidu.com/p/2460150866 #标签操作 from bs4 imp ...

  8. Notes 和 Domino 已知限制

    Notes 和 Domino 已知限制 功能测试 限制数据库的最大大小是多少? 最大的 OS 文件大小限制 -(最大为 64GB)文本域的最大大小是多少? 15KB(存储):15KB,显示在视图列中R ...

  9. 修改和查询sqlserver里面的xml 好像只能一个个改不能批量

    select [ExtendFieldId], [Setting].value('(/UploadFileViewModel/UploadProviderKey)[1]', 'nvarchar(max ...

  10. 基于Centos搭建Python Web 环境搭建教程

    CentOS 7.2 64 位操作系统 安装 setuptools 工具 安装 因为之后我们需要安装 Django ,而 Django 需要用这个工具,所以我们需要先安装 setuptools 工具. ...