导航:首页 > 源码编译 > ssim算法中的参数

ssim算法中的参数

发布时间:2023-09-24 16:04:08

⑴ SVM算法原理

一、决策面方程

以二维空间为例,二维空间中任意一条直线方程可以写为

我们将其向量化,可以得到

设用向量w代表矩阵a1和a2,用向量x代表矩阵x1和x2,标量γ代表b,则方程可化表示为

从方程可知,一个n维空间的超平面在二维空间上的表现,可以是一条直线,或者一个曲线(二维空间中只能看到这个n维超平面穿过而无法看到其模样), 超平面方程即是我们的决策面方程

二、函数间隔和几何间隔

在SVM监督学习中,我们规定标签数据为+1和-1两个值,这么做的目的, 可以计算出任意一个样本点在超平面方程上的表现结果的符号,与标签符号是否一致来判断分类的正确性 ,为此我们可以引入函数间隔的概念

但是当我们成比例的缩放w和γ,函数间隔的值也将成比例的变化,可是超平面的位置并没有发生任何变化,所以函数间隔并不是我们想要的分类间隔,为此,我们需要引入几何间隔的概念

还是以二维空间出发,任意一点到直线的距离可以写成

我们将其拓展到n维空间,直线方程即是我们的超平面方程,则n维空间中任何一点到超平面的距离可以写成

为此,我们引入几何间隔概念,其中||w||表示向量w的二范数

从几何间隔可以看出,就算等比例缩放w和γ,由于除上了||w||使得几何间隔的值不会改变,它只随着超平面位置的变化而变化,因此, 我们要寻找的分类间隔是几何间隔

三、不等式约束条件

SVM算法的目的是找到一个将分类效果达到最合理化的超平面,这个超平面即是分类器 。而评估分类器的好坏的标准就是分类间隔的大小

我们定义分类间隔的距离为d,好的分类器应该让所有样本点到决策面的几何间隔都大于等于d

化简上式,不等式两边同时除以d可得

由于||w||和d都是标量,可定义

则上式可化简为

在不等式两边同时乘以yi,即将两个式子化简为一个式子(这里体现了正是因为标签数据为+1和-1,才方便将约束条件变成一个约束方程)

这个约束方程的意义 即是任何样本点到超平面(分类器)的几何间隔都大于等于分类间隔

四、SVM最优化模型的数学描述

评估分类器的优劣是分类间隔的大小,且对于任意样本点都满足约束方程

由约束方程可知,当样本点落在支持向量边界上有如下关系

则分类间隔d可以表示为支持向量点到超平面的几何间隔

要让任何样本点都在d之外,即求分类间隔d的最大值,则目标函数可以写成

为了方便在后续最优化处理中对目标函数的求导,我们将目标函数做等效变化

由目标函数是二次的,而约束条件是线性的,则 SVM的数学模型即是:不等式约束条件下的二次型函数优化 ,而求解这一类优化问题,接下来我们需要构造 拉格朗乘子函数

五、引入拉格朗函数

目标函数是求解在约束条件g(x)下的二次型函数f(x)的最小值,直观上我们希望构造一个函数L(x),使得L(x)在f(x)的可行解区域内的求出的值和f(x)求出的值完全一样,而在f(x)的可行解区域外,L(x)的值又接近无穷大,这么做的目的,使得我们可以用一个函数L(x)来等效表示原问题的g(x)和f(x)

拉格朗函数的目的,就是将约束条件融合到目标函数中,构造一个新函数来表示目标函数,将有约束的优化问题转化为无约束的优化问题

下面,我们构造拉格朗函数来表示目标函数

其中αi是拉格朗日乘子,每一个约束条件对应一个拉格朗日乘子,其中αi大于等于0

则原优化问题可以转化为

讨论如下条件(1)(2):

(1) 当样本点不满足约束条件时,即说明在 可行解区域外

此时将αi置为正无穷大,那么θ(w)显然也是正无穷大

(2) 当样本点满足约束条件时,即说明在 可行解区域内

此时θ(w)的最小值就是原目标函数,于是综上所述,引入拉格朗乘子函数后,可以得到新的目标函数

我们用p*表示优化目标函数后的最优解,且与最初的目标函数等价

观察新的目标函数,如果直接求偏导数求解,那么一上来将面对w和b两个未知参数,而αi又是不等式约束,求解过程将非常复杂。换一个角度思考,如果将max和min的位置对调,变成如下新的目标函数

上式变化使用了 拉格朗日函数的对偶性,交换后的新问题即是原目标函数的对偶问题 ,我们用d*来表示对偶目标函数的最优解,可见d*的求导过程比p*相对容易,且d*<=p*,而当满足下列条件时,d*= p*

因为目标函数本身已经是一个凸函数,而优化问题又是求解最小值,所以目标函数的最优化问题就是凸优化问题,则接下来就要重点讨论KKT条件

六、KKT条件的描述

一个最优化模型能够表示成下列标准形式

其中f(x)是需要最小化的函数,h(x)是等式约束,g(x)是不等式约束,m和n分别是等式约束和不等式约束的数量

KKT条件即是规定f(x)的 最优值 必须满足以下(1)(2)(3)条件, 只有满足KKT条件,目标函数的最优化问题依然可以用拉格朗日乘子法解决

很明显,我们需要优化的目标函数属于带有不等式约束函数g(x),所以条件二显然满足,下面我们来分析条件一和条件三的理论

七、目标函数的等高线与约束条件的最优值分析(条件一)

对于KKT条件一的分析,我们假设目标函数是f(x1,x2)的二元函数,它的图像在三维空间里是一个曲面,准确的来说是一个凸曲面

其中g(x1,x2)是约束方程,要求目标函数f(x1,x2)的最小值,即转化为 求g(x1,x2)=c这条曲线上的一点,使得f(x1,x2)取得最小值,换个比喻,就是在山上(目标函数曲面)寻找一条山路(约束条件曲线)的最低点

我们画出目标函数的等高线,来分析目标函数最优值和约束条件的关系

对于研究目标函数z=f(x1,x2),当z取不同的值,即将曲线z投影在(x1,x2)组成的空间中(这里指的是二维空间),也就是曲面的等高线,上图中d1和d2即是两条目标函数的等高线,可以看出,当约束函数g(x1,x2)与目标函数的等高线有共同的交点, 即证明这组值同时满足在目标函数的可行域中,也符合约束条件的约束关系

如果等高线与g(x1,x2) 相交 ,则是一组目标函数的解,但是这个解一定不是最优解, 因为相交意味着肯定存在其它等高线在该条等高线的内部或者外部 ,可能会使得新的等高线与g(x1,x2)的交点更大或者更小,这就意味着只有当等高线与g(x1,x2) 相切 ,才可能得到最优解(切线可能多条)

所以最优解必须满足: 目标函数的负梯度方向与约束函数的梯度方向一致

而上式恒成立的条件就是: 拉格朗日乘子α >= 0 ,且这个式子就是目标函数对各个参数求偏导数的结果,即KKT的第一个条件:目标函数对各个参数的导数为0

八、分类讨论约束条件和拉格朗日乘子的组合(条件三)

对于KKT条件三,可以看出,因为所有的约束函数gi(x)<=0,所有的拉格朗日乘子αi>=0,要使得求和后结果为0,要么某个约束函数gi(x)=0,要么其对应的αi=0

从一个案例出发来分析KKT条件三的逻辑,假设目标函数和约束函数是

将不等式约束构造出拉格朗日函数,并分别对x1和x2求偏导数

而KKT的条件三要求最优解满足 ∑α*g(x) = 0,在这个案例里α和g(x)只有一个,结合条件一,可以得到

根据之前的分析,最优值满足条件三的话,要么α=0,要么g(x)=0

(i):如果α=0,则x1=1,x2=-2,代入g(x1,x2) =10-1-10*(-2)=29>0,发现这组解违背了约束函数g(x)<0,则舍弃这组解

(ii): 如果g(x1,x2)=0,则代入x1和x2的表达式到g(x)中,解出α=58/101>0,发现这组解不违背约束函数,则代入α解出x1=130/101,x2=88/101,则这组解有可能是最优解

综上(i)(ii)讨论,目标函数的最优值符合KKT条件三,也说明了 满足强对偶条件的优化问题的最优值必须满足KKT条件

九、求解对偶问题

上面分析了目标函数满足凸优化和KKT条件,则问题转化为求解原问题的对偶问题(即p*=d*)

根据对偶问题描述,先要求内侧w和b关于L(w,b,α)的最小化值,即求L对w和b的偏导数

将w和b的偏导数带入拉格朗函数化简得

整理一下最终化简结果为

从上述结果可以看出,样本的x和y是已知的,此时的 L(w,b,α)函数只有一个变量,即αi

我们归纳一下现在的目标函数为

现在目标函数变成了如上形式,其中αi>=0,这里隐含着一个假设,即数据100%线性可分,但是现实生活中,数据往往是不会那么规则的线性化,为此我们需要引入松弛变量

十、引入松弛变量

由于现实世界中的数据都是带有噪音的,也就是数据可能出偏离其正常的位置很远,而出现这种极端现象后往往会影响超平面的选择,也许将无法构造出将数据彻底分开的超平面出来

所以对于处理这种情况, SVM需要允许(妥协)出某些噪音很大的数据点能够偏离超平面,即允许其出现在超平面的错误的一侧 ,为此我们引入松弛变量C,这样我们的目标函数又变为

接下来为了研究讨论αi的取值范围,我们加上一个负号将目标函数等价转化为

十一、讨论拉格朗乘子的取值意义和其值域

回顾一下最初的约束条件为

设ui为该约束条件,可以归纳出αi关于约束函数的取值意义

αi只有满足上述3种情况,才能求出最优解,所以 当αi与约束条件ui冲突的时候,需要更新这些αi ,这也就是满足目标函数的第一个约束限制,即0<=αi<=C

而同时目标函数还受到第二个约束条件的限制,即

所以不能只更新一个αi因子,需要同时再次更新第二个αj因子,也就是 α因子总是成对的更新(αi对总是和αj配对),一增一减,此消彼长,才能保证加权和为0的约束 ,同时这也就是下面提及SMO算法的思想和多元函数化简为二元函数,在从二元函数化简为一元函数的难点

根据这个约束和α因子需要成对更新,假设我们选取的两个拉格朗乘子为α1和α2,则更新之前是old,更新之后是new,且更新前后需要满足和为0的约束

两个因子同时更新显然非常困难,所以需要先求出第一个αj的解,再用αj的解去表示更新第二个αi的解 ,后文的SMO算法会阐述这一点。因此需要先确定αj的取值范围,假设L和H分别为它的下界和上界,结合目标函数的约束限制来综合讨论L和H的取值关系

(i):当y1和y2异号时,可以得到

移项可得a2 = a1 - A,此时α的取值范围如下图所示

所以此时α的上下界H和L为

(ii):当y1和y2同号时,可以得到

移项可得a2 = -a1 + A,此时α的取值范围如下图所示

所以此时α的上下界H和L为

综上(i)(ii)的讨论,通过y1和y2的异号或者同号,可以推导出α更新后的上下界分别为

这个公式显得非常的重要,它将α因子限制在有效的矩形范围内,在SMO算法中,当我们更新完α后,由于α可能会被更新得很大或很小,因此需要经过裁剪来保证α的在约束条件内

12、SMO算法的思想

回顾之前第九,第十,第十一步的分析,目标函数为

目标函数只包含n个变量α的 多元函数 ,且带有两个约束条件,我们的 目的是求出目标函数的最小值,即找到一组α的组合,使得目标函数取得最小值

由第十一步的分析,我们需要不断更新这n个α因子,通过迭代来逼近函数达到最小值,但是如果一次性更新n个参数,将会有n!种组合,那么时间复杂度将会非常高,为此我们首先想到 坐标上升(下降)法

来通过一个例子来说明坐标上升法的思路

可知案例中要求一个三元函数的最大值, 算法的思想是每次迭代时只更新一个维度,通过多次迭代直到收敛来优化函数的最值 ,求出三个变量的偏导数推出其关系

通过迭代即就可以求出其最值

SMO算法借鉴了坐标上升(下降)法的思想来优化α因子组合,但是由于目标函数的第二个约束条件有加权和为0的限制,导致每次迭代时候不能只更新一个因子αi,必须同时更新与之配对的另一个因子αj,此消彼长才能保证加权和为0(第十一步中已提及)

所以SMO算法思想是将原始问题中,求解n个参数的二次规划问题,分解成了多个子二次规划问题来分别求解,每一个子问题只需要求解2个参数,即将多元函数推导为二元函数,再将二元函数推导为一元函数

13、多元函数推导为二元函数

目标函数是关于α的N元函数,通过SMO的算法思想,假设每次迭代更新,选取一对α1和α2的组合,其余的乘子不变, 首先需要将α1和α2从目标函数中分离出来 ,也就是将多元函数推导为二元函数

从N元函数中分离出α1和α2因子

由于上式推导结果过于复杂,我们定义2个表达式来表示上式常量部分,用来简化上式

又由于单独存下的常数项对以后的求导没有贡献,所以我们提出单独的常数项定义为Constant

带入vi和Constant表达式,则结果化简为

至此,我们将 多元函数推导为含有α1和α2变量的二元函数 ,接下来将这个二元函数推导为一元函数

14、二元函数推导为一元函数

我们需要推导出α1和α2的关系,然后用α2来表示α1带入二元函数,就可以推导出关于α2的一元函数了

由目标函数的第二个约束条件

同理根据SMO算法思想,从约束条件中分离出α1和α2

将等式两边同时乘以y1,可推导出α1和α2的关系

同理,我们定义两个表达式r和s来表示上式的常量部分,用来简化上式关系

带入r和s后,α1和α2的关系推导为

下面将α1带入我们的二元函数中,可得

至此, 我们将二元函数推导为只含有一个变量α2的一元函数 ,接下来终于可以对目标函数求导了

15、求解一元函数的偏导数,推导出第一个拉格朗乘子的递推关系

我们对一元函数求α2的偏导数为0

带入s=y1*y2和y2*y2=1,整理上式可求出α2

⑵ 卷积神经网络参数解析

(1)现象:

        (1-1)一次性将batch数量个样本feed神经网络,进行前向传播;然后再进行权重的调整,这样的一整个过程叫做一个回合(epoch),也即一个batch大小样本的全过程就是一次迭代。

        (1-2)将训练数据分块,做成批(batch training)训练可以将多个训练数据元的loss function求和,使用梯度下降法,最小化 求和后的loss function ,进而对神经网络的参数进行优化更新

(2)一次迭代:包括前向传播计算输出向量、输出向量与label的loss计算和后向传播求loss对权重向量 w 导数(梯度下降法计算),并实现权重向量 w 的更新。

(3)优点:

        (a)对梯度向量(代价函数对权值向量 w 的导数)的精确估计,保证以最快的速度下降到局部极小值的收敛性;一个batch一次梯度下降;

        (b)学习过程的并行运行;

        (c)更加接近随机梯度下降的算法效果;

        (d)Batch Normalization 使用同批次的统计平均和偏差对数据进行正则化,加速训练,有时可提高正确率 [7]

(4)现实工程问题:存在计算机存储问题,一次加载的batch大小受到内存的影响;

(5)batch参数选择:

        (5-1)从收敛速度的角度来说,小批量的样本集合是最优的,也就是我们所说的mini-batch,这时的batch size往往从几十到几百不等,但一般不会超过几千

        (5-2)GPU对2的幂次的batch可以发挥更佳的性能,因此设置成16、32、64、128...时往往要比设置为整10、整100的倍数时表现更优

    (6)4种加速批梯度下降的方法 [8] :

        (6-1)使用动量-使用权重的 速度 而非 位置 来改变权重。

        (6-2)针对不同权重参数使用不同学习率。

        (6-3)RMSProp-这是Prop 的均方根 ( Mean Square ) 改进形式,Rprop 仅仅使用梯度的符号,RMSProp 是其针对 Mini-batches 的平均化版本

        (6-4)利用曲率信息的最优化方法。

(1)定义:运用梯度下降算法优化loss成本函数时,权重向量的更新规则中,在梯度项前会乘以一个系数,这个系数就叫学习速率η

(2)效果:

        (2-1)学习率η越小,每次迭代权值向量变化小,学习速度慢,轨迹在权值空间中较光滑,收敛慢;

        (2-2)学习率η越大,每次迭代权值向量变化大,学习速度快,但是有可能使变化处于震荡中,无法收敛;

    (3)处理方法:

        (3-1)既要加快学习速度又要保持稳定的方法修改delta法则,即添加动量项。

    (4)选择经验:

        (4-1)基于经验的手动调整。 通过尝试不同的固定学习率,如0.1, 0.01, 0.001等,观察迭代次数和loss的变化关系,找到loss下降最快关系对应的学习率。

        (4-2)基于策略的调整。

                (4-2-1)fixed 、exponential、polynomial

                (4-2-2)自适应动态调整。adadelta、adagrad、ftrl、momentum、rmsprop、sgd

    (5)学习率η的调整:学习速率在学习过程中实现自适应调整(一般是衰减)

        (5-1)非自适应学习速率可能不是最佳的。

        (5-2)动量是一种自适应学习速率方法的参数,允许沿浅方向使用较高的速度,同时沿陡峭方向降低速度前进

        (5-3)降低学习速率是必要的,因为在训练过程中,较高学习速率很可能陷入局部最小值。

参考文献:

[1]  Simon Haykin. 神经网络与机器学习[M]. 机械工业出版社, 2011.

[2]   训练神经网络时如何确定batch的大小?

[3]   学习笔记:Batch Size 对深度神经网络预言能力的影响  

[4]   机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size.  http://blog.csdn.net/u012162613/article/details/44265967

[5]   深度学习如何设置学习率 . http://blog.csdn.net/mao_feng/article/details/52902666

[6]   调整学习速率以优化神经网络训练. https://zhuanlan.hu.com/p/28893986

[7]   机器学习中用来防止过拟合的方法有哪些?

[8]   Neural Networks for Machine Learning by Geoffrey Hinton .

[9]   如何确定卷积神经网络的卷积核大小、卷积层数、每层map个数

[10]   卷积神经网络的卷积核大小、卷积层数、每层map个数都是如何确定下来的呢?

⑶ 纠错码的基本原理和性能参数

纠错码能够检错或纠错,主要是靠码字之间有较大的差别。这可用码字之间的汉明距离d(x,y)来衡量。它的定义为码字x与y之间的对应位取不同值的码元个数。一种纠错码的最小距离d定义为该种码中任两个码字之间的距离的最小值。一种码要能发现e个错误,它的最小距离d应不小于e+1。若要能纠正t个错误,则d应不小于2t+1。一个码字中非零码元的个数,称为此码字的汉明重量。一种码中非零码字的重量的最小值,称为该码的最小重量。对线性码来说,一种码的最小重量与其最小距离在数值上是相等的。
在构造线性码时,数字上是从n维空间中选一k维子空间,且使此子空间内各非零码字的重量尽可能大。当构造循环码时,可进一步将每一码字看成一多项式,将整个码看成是多项式环中的理想,这一理想是主理想,故可由生成多项式决定;而多项式完全可由它的根规定。这样,就容易对码进行构造和分析。这是BCH码等循环码构造的出发点。一般地说,构造一种码时,均设法将它与某种代数结构相联系,以便对它进行描述,进而推导它的性质,估计它的性能和给出它的译码方法。若一种码的码长为n,码字数为M,或信息位为h,以及最小距离为d,则可把此码记作【n,M,d】码。若此码为线性码,常简记作(n,k)或(n,k,d)码。人们还常用R=log2M/n表示码的信息率或简称码率,单位为比特/码元。R越大,则每个码元所携带的信息量越大,编码效率越高。 纠错码实现中最复杂的部分是译码。它是纠错码能否应用的关键。根据式(1),采用的码长n越大,则误码率越小。但n越大,编译码设备也越复杂,且延迟也越大。人们希望找到的译码方法是:误码率随码长n的增加按指数规律下降;译码的复杂程度随码长n的增加接近线性地增加;译码的计算量则与码长n基本无关。可惜,已经找到的码能满足这样要求的很少。不过由于大规模集成电路的发展,即使应用比较复杂的但性能良好的码,成本也并不太高。因此,纠错码的应用越来越广泛。
纠错码传输的都是数字信号。这既可用硬件实现,也可用软件实现。前者主要用各种数字电路,主要是采用大规模集成电路。软件实现特别适合计算机通信网等场合。因为这时可以直接利用网中的计算机进行编码和译码,不需要另加专用设备。硬件实现的速度较高,比软件可快几个数量级。
在传信率一定的情况下,如果采用纠错码提高可靠性,要求信道的传输率增加,带宽加大。因此,纠错码主要用于功率受限制而带宽较大的信道,如卫星、散射等系统中。纠错码还用在一些可靠性要求较高,但设备或器件的可靠性较差,而余量较大的场合,如磁带、磁盘和半导体存储器等。
在分组码的研究中,谱分析的方法受到人们的重视。纠同步错误码、算术码、不对称码、不等错误纠正码等,也得到较多的研究。 分组码是对信源待发的信息序列进行分组(每组K位)编码,它的校验位仅同本组的信息位有关。自20世纪50年代分组码的理论获得发展以来,分组码在数字通信和数据存储系统中已被广泛应用。
分组码的码长n和码字个数M是一个码的主要构造参数。码长为n的码中所有码字的位数均为n;若要用一个码传送k比特信息,则码字的个数M必须满足。典型的分组码是由k位信息位和r位监督位组成的,这样构成的码一般称为系统码。
分组码中应用最广的线性分组码。线性分组码中的M个码字之间具有一定线性约束关系,即这些码字总体构成了n维线性空间的一个k维子空间。称此k维子空间为(n,k)线性分组码。线性系统码的特点是每个码字的前k位均由这个码字所对应的信息位组成,并通过对这k位信息位的线性运算得到后面n—k是位监督位。
线性分组码中应用最广的是循环码,循环码的主要特征是任何码字在循环移位后个码字。循环码的优点在于其编码和解码手续比一般线性码简单,因而易于在设备上实现。在循环码中,码字可表示为多项式。循环码的码字多项式都可表示成为循环码的生成多项式与这个码字所代表的信息多项式的乘积,即,因此一个循环码可以通过给出其生成多项式来规定。常用的循环码有BCH码和RS码。
网格码有多种描述方法,网格图是常用方法之一,它能表示出编码过程。一个码率为1/2、包含四种状态的网格码的网格图如图所示。图1中00,01,10,11表示编码器所具有的四种状态,以“·”示出,从每一状态出发都存在两条支路,位于上面的一条支路对应于编码器输入为“0”的情况,位于下面的一条支路对应于编码器输入为“1”的情况,而每一支路上所列出的两个二进位码则表示相应的编码输出。因而可知,编码输出不仅决定于编码器的当前输入,还决定于编码器的状态,例如在图中从“00”状态出发;,若输入的二进制数据序列为1011,则编码器的状态转移过程为00→01→10→01→11,而相应的编码输出序列为11010010。在网格图中任意两条从同一状态出发;,经不同的状态转移过程后又归于另一相同状态(该状态也可与初始状态相同)的路径间的距离的最小值称为码的自由距离。如该图中的为5。对于卷积码来说,的计算可简化为始于且终于零状态的非全零路径与全零路径间距离的最小值。是表征网格码纠错能力的重要参数。维特比算法是广泛采用的网格码的译码方法。由于网格码的状态越多,译码越复杂,所以状态个数是度量网格码译码复杂性的重要参数。一般说来可以通过增大译码复杂性来增加,从而提高码的纠错能力。
BCH码、网格码已被广泛地应用于移动通信、卫星通信和频带数据传输中。RS码也被广泛应用于光盘的存储中。
大多数纠错码是设计来纠随机误码的,可以通过交织的方法使它适用于对突发误码的纠错。交织是一种使得集中出现的突发误码在解码时进行分散化的措施,从而使其不超出纠错码的纠错能力范围。 卷积码不对信息序列进行分组编码,它的校验元不仅与当前的信息元有关,而且同以前有限时间段上的信息元有关。卷积码在编码方法上尚未找到像分组码那样有效的数学工具和系统的理论。但在译码方面,不论在理论上还是实用上都超过了分组码,因而在差错控制和数据压缩系统中得到广泛应用。

阅读全文

与ssim算法中的参数相关的资料

热点内容
奔跑程序员 浏览:466
服务器如何搭建类似github 浏览:290
明日之后安卓太卡怎么办 浏览:502
如何使用命令方块找到村庄 浏览:766
泛函压缩映像原理 浏览:521
win10清除文件夹浏览记录 浏览:964
如何查看服务器域中所有服务 浏览:384
学mastercam91编程要多久 浏览:999
如何查服务器地址和端口 浏览:911
教学云平台app怎么下载 浏览:389
单片机510教学视频 浏览:624
陕西信合app怎么查看自己的存款 浏览:663
风冷冰箱有压缩机 浏览:274
android实现wifi连接wifi 浏览:669
飞猪app怎么帮别人值机 浏览:924
笔记本开我的世界服务器地址 浏览:546
怎样隐藏bat命令 浏览:127
android开发创意 浏览:138
京剧猫为什么进不去服务器 浏览:784
怎么自己免费制作一个手机app 浏览:583