softmax算法为什么采用softmaxjs functionn作为每一个类别的概率

From Ufldl
在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签
可以取两个以上的值。 Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10个不同的单个数字。Softmax回归是有监督的,不过后面也会介绍它与深度学习/无监督学习方法的结合。(译者注: MNIST 是一个手写数字识别库,由NYU 的Yann LeCun 等人维护。 )
回想一下在 logistic 回归中,我们的训练集由
个已标记的样本构成: ,其中输入特征。(我们对符号的约定如下:特征向量
的维度为 ,其中
对应截距项 。) 由于 logistic 回归是针对二分类问题的,因此类标记 。假设函数(hypothesis function) 如下:
我们将训练模型参数 ,使其能够最小化代价函数 :
在 softmax回归中,我们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标
个不同的值(而不是 2 个)。因此,对于训练集 ,我们有 。(注意此处的类别下标从 1 开始,而不是 0)。例如,在 MNIST 数字识别任务中,我们有
个不同的类别。
对于给定的测试输入 ,我们想用假设函数针对每一个类别j估算出概率值 。也就是说,我们想估计
的每一种分类结果出现的概率。因此,我们的假设函数将要输出一个
维的向量(向量元素的和为1)来表示这
个估计的概率值。 具体地说,我们的假设函数
形式如下:
是模型的参数。请注意 这一项对概率分布进行归一化,使得所有概率之和为 1 。
为了方便起见,我们同样使用符号
来表示全部的模型参数。在实现Softmax回归时,将
的矩阵来表示会很方便,该矩阵是将
按行罗列起来得到的,如下所示:
现在我们来介绍 softmax 回归算法的代价函数。在下面的公式中, 是示性函数,其取值规则为:
值为真的表达式
值为假的表达式 。举例来说,表达式
的值为1 ,的值为 0。我们的代价函数为:
值得注意的是,上述公式是logistic回归代价函数的推广。logistic回归代价函数可以改为:
可以看到,Softmax代价函数与logistic 代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的
个可能值进行了累加。注意在Softmax回归中将
分类为类别
的概率为:
的最小化问题,目前还没有闭式解法。因此,我们使用迭代的优化算法(例如梯度下降法,或 L-BFGS)。经过求导,我们得到梯度公式如下:
让我们来回顾一下符号 "" 的含义。 本身是一个向量,它的第
是 对 的第
个分量的偏导数。
有了上面的偏导数公式以后,我们就可以将它代入到梯度下降法等算法中,来最小化 。 例如,在梯度下降法的标准实现中,每一次迭代需要进行如下更新: ()。
当实现 softmax 回归算法时, 我们通常会使用上述代价函数的一个改进版本。具体来说,就是和权重衰减(weight decay)一起使用。我们接下来介绍使用它的动机和细节。
Softmax 回归有一个不寻常的特点:它有一个“冗余”的参数集。为了便于阐述这一特点,假设我们从参数向量
中减去了向量 ,这时,每一个
都变成了 ()。此时假设函数变成了以下的式子:
换句话说,从
完全不影响假设函数的预测结果!这表明前面的 softmax 回归模型中存在冗余的参数。更正式一点来说, Softmax 模型被过度参数化了。对于任意一个用于拟合数据的假设函数,可以求出多组参数值,这些参数得到的是完全相同的假设函数 。
进一步而言,如果参数
是代价函数
的极小值点,那么
同样也是它的极小值点,其中
可以为任意向量。因此使
最小化的解不是唯一的。(有趣的是,由于
仍然是一个凸函数,因此梯度下降时不会遇到局部最优解的问题。但是 Hessian 矩阵是奇异的/不可逆的,这会直接导致采用牛顿法优化就遇到数值计算的问题)
时,我们总是可以将 替换为(即替换为全零向量),并且这种变换不会影响假设函数。因此我们可以去掉参数向量
(或者其他
中的任意一个)而不影响假设函数的表达能力。实际上,与其优化全部的
(其中 ),我们可以令 ,只优化剩余的
个参数,这样算法依然能够正常工作。
在实际应用中,为了使算法实现更简单清楚,往往保留所有参数 ,而不任意地将某一参数设置为 0。但此时我们需要对代价函数做一个改动:加入权重衰减。权重衰减可以解决 softmax 回归的参数冗余所带来的数值问题。
我们通过添加一个权重衰减项
来修改代价函数,这个衰减项会惩罚过大的参数值,现在我们的代价函数变为:
有了这个权重衰减项以后 (),代价函数就变成了严格的凸函数,这样就可以保证得到唯一的解了。 此时的 Hessian矩阵变为可逆矩阵,并且因为是凸函数,梯度下降法和 L-BFGS 等算法可以保证收敛到全局最优解。
为了使用优化算法,我们需要求得这个新函数
的导数,如下:
通过最小化 ,我们就能实现一个可用的 softmax 回归模型。
时,softmax 回归退化为 logistic 回归。这表明 softmax 回归是 logistic 回归的一般形式。具体地说,当
时,softmax 回归的假设函数为:
利用softmax回归参数冗余的特点,我们令 ,并且从两个参数向量中都减去向量 ,得到:
因此,用 来表示,我们就会发现 softmax 回归器预测其中一个类别的概率为 ,另一个类别概率的为 ,这与 logistic回归是一致的。
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢?
这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数
k = 4 的softmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 k 设为5。)
如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用4个二分类的 logistic 回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。
现在我们来看一个计算视觉领域的例子,你的任务是将图像分到三个不同类别中。(i) 假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。你会使用sofmax回归还是 3个logistic 回归分类器呢? (ii) 现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,你又会选择 softmax 回归还是多个 logistic 回归分类器呢?
在第一个例子中,三个类别是互斥的,因此更适于选择softmax回归分类器 。而在第二个例子中,建立三个独立的 logistic回归分类器更加合适。
Softmax回归
Softmax Regression
有监督学习
supervised learning
无监督学习
unsupervised learning
deep learning
logistic回归
logistic regression
intercept term
binary classification
类型标记 class labels
估值函数/估计值 hypothesis
cost function
multi-class classification
weight decay
曾俊瑀(), 王方(),王文中()
Softmax回归 |
Language&:
Personal tools
This page was last modified on 8 April 2013, at 05:38.
This page has been accessed 368,244 times.softmax算法为什么采用softmax function作为每一个类别的概率_百度知道
softmax算法为什么采用softmax function作为每一个类别的概率
我有更好的答案
3,输出结果本来挺奇怪 经过max以后就是categorical 的了,0. 对一个三类问题,某样本经过NN处理后。对不? (至于为啥要max先理解max.1]的话,那么经过max之后的结果为[1,0,0],最后一层输出值为[24
采纳率:84%
来自团队:
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Machine Learning(14)
From Ufldl
在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签
可以取两个以上的值。 Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10个不同的单个数字。Softmax回归是有监督的,不过后面也会介绍它与深度学习/无监督学习方法的结合。(译者注:
MNIST 是一个手写数字识别库,由NYU 的Yann LeCun 等人维护。 )
回想一下在 logistic 回归中,我们的训练集由
个已标记的样本构成:
,其中输入特征。(我们对符号的约定如下:特征向量 的维度为,其中
对应截距项 。) 由于 logistic 回归是针对二分类问题的,因此类标记。假设函数(hypothesis function) 如下:
我们将训练模型参数 ,使其能够最小化代价函数 :
在 softmax回归中,我们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标
个不同的值(而不是 2 个)。因此,对于训练集,我们有。(注意此处的类别下标从
1 开始,而不是 0)。例如,在 MNIST 数字识别任务中,我们有 个不同的类别。
对于给定的测试输入 ,我们想用假设函数针对每一个类别j估算出概率值。也就是说,我们想估计
的每一种分类结果出现的概率。因此,我们的假设函数将要输出一个 维的向量(向量元素的和为1)来表示这
个估计的概率值。 具体地说,我们的假设函数 形式如下:
是模型的参数。请注意这一项对概率分布进行归一化,使得所有概率之和为
为了方便起见,我们同样使用符号
来表示全部的模型参数。在实现Softmax回归时,将
用一个 的矩阵来表示会很方便,该矩阵是将
按行罗列起来得到的,如下所示:
现在我们来介绍 softmax 回归算法的代价函数。在下面的公式中, 是示性函数,其取值规则为:
值为真的表达式
值为假的表达式。举例来说,表达式
的值为1 ,的值为 0。我们的代价函数为:
值得注意的是,上述公式是logistic回归代价函数的推广。logistic回归代价函数可以改为:
可以看到,Softmax代价函数与logistic 代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的
个可能值进行了累加。注意在Softmax回归中将
分类为类别 的概率为:
的最小化问题,目前还没有闭式解法。因此,我们使用迭代的优化算法(例如梯度下降法,或 L-BFGS)。经过求导,我们得到梯度公式如下:
让我们来回顾一下符号 && 的含义。
本身是一个向量,它的第
个分量的偏导数。
有了上面的偏导数公式以后,我们就可以将它代入到梯度下降法等算法中,来最小化 。 例如,在梯度下降法的标准实现中,每一次迭代需要进行如下更新:()。
当实现 softmax 回归算法时, 我们通常会使用上述代价函数的一个改进版本。具体来说,就是和权重衰减(weight decay)一起使用。我们接下来介绍使用它的动机和细节。
Softmax 回归有一个不寻常的特点:它有一个“冗余”的参数集。为了便于阐述这一特点,假设我们从参数向量
中减去了向量,这时,每一个
都变成了()。此时假设函数变成了以下的式子:
换句话说,从
中减去 完全不影响假设函数的预测结果!这表明前面的 softmax
回归模型中存在冗余的参数。更正式一点来说, Softmax 模型被过度参数化了。对于任意一个用于拟合数据的假设函数,可以求出多组参数值,这些参数得到的是完全相同的假设函数。
进一步而言,如果参数
是代价函数
的极小值点,那么 同样也是它的极小值点,其中
可以为任意向量。因此使 最小化的解不是唯一的。(有趣的是,由于 仍然是一个凸函数,因此梯度下降时不会遇到局部最优解的问题。但是
Hessian 矩阵是奇异的/不可逆的,这会直接导致采用牛顿法优化就遇到数值计算的问题)
时,我们总是可以将替换为(即替换为全零向量),并且这种变换不会影响假设函数。因此我们可以去掉参数向量
(或者其他 中的任意一个)而不影响假设函数的表达能力。实际上,与其优化全部的
个参数 (其中),我们可以令,只优化剩余的
个参数,这样算法依然能够正常工作。
在实际应用中,为了使算法实现更简单清楚,往往保留所有参数 ,而不任意地将某一参数设置为 0。但此时我们需要对代价函数做一个改动:加入权重衰减。权重衰减可以解决 softmax 回归的参数冗余所带来的数值问题。
我们通过添加一个权重衰减项
来修改代价函数,这个衰减项会惩罚过大的参数值,现在我们的代价函数变为:
有了这个权重衰减项以后 (),代价函数就变成了严格的凸函数,这样就可以保证得到唯一的解了。 此时的 Hessian矩阵变为可逆矩阵,并且因为是凸函数,梯度下降法和
L-BFGS 等算法可以保证收敛到全局最优解。
为了使用优化算法,我们需要求得这个新函数
的导数,如下:
通过最小化 ,我们就能实现一个可用的 softmax 回归模型。
时,softmax 回归退化为 logistic 回归。这表明 softmax 回归是 logistic 回归的一般形式。具体地说,当
时,softmax 回归的假设函数为:
利用softmax回归参数冗余的特点,我们令 ,并且从两个参数向量中都减去向量,得到:
因此,用 来表示,我们就会发现 softmax 回归器预测其中一个类别的概率为,另一个类别概率的为&,这与
logistic回归是一致的。
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢?
这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数k = 4 的softmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数k
如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用4个二分类的 logistic 回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。
现在我们来看一个计算视觉领域的例子,你的任务是将图像分到三个不同类别中。(i) 假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。你会使用sofmax回归还是 3个logistic 回归分类器呢? (ii) 现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,你又会选择 softmax 回归还是多个 logistic 回归分类器呢?
在第一个例子中,三个类别是互斥的,因此更适于选择softmax回归分类器 。而在第二个例子中,建立三个独立的 logistic回归分类器更加合适。
Softmax回归 Softmax Regression有监督学习 supervised learning无监督学习 unsupervised learning深度学习 deep learninglogistic回归 logistic regression截距项 intercept term二元分类 binary classification类型标记 class labels估值函数/估计值 hypothesis代价函数 cost function多元分类 multi-class classification权重衰减 weight decay
访问:28780次
排名:千里之外
原创:58篇
转载:58篇
(14)(44)(39)(13)(6)softmax算法为什么采用softmax function作为每一个类别的概率 _ 丹东人才网
softmax算法为什么采用softmax function作为每一个类别的概率
Margin类型;
# learning rate multiplier for the biases
weight_decay:指定输入值小于零时的输出: HINGE_LOSS
bottom: &quot: 学习率调整的参数; 1: 4
# step 4 pixels between each filter application
weight_filler {loss&constant' 0时输出x: 2
# step two pixels (in the bottom blob) between pooling regions
}}卷积层的重要参数必需参数: &quot: &
type: 3 # pool over a 3x3 region
stride, 和STOCHASTIC三种方法pad (or pad_h and pad_w) [default 0]。 weight_decay:过滤器的个数kernel_size (or kernel_h and kernel_w). Specifically: &quot: &quot,其中h_o = (h_i + 2 * pad_h - kernel_h) &#47:kernel_size (or kernel_h and kernel_w):参数的初始化方法bias_filler。 ReLU是目前使用做多的激励函数: 选择L1或者 L2范数输入.01
# distribution with stdev 0.6 Accuracy and Top-k类型;pred&quot:negative_slope [default 0]: 96
# learn 96 filters
kernel_pool1&quot:SIGMOID_CROSS_ENTROPY_LOSS2:ACCURACY 用来计算输出和目标的正确率.2 池化层(Pooling)类型: HINGE_LOSS
bottom:POOLING例子layers {stride_h + 1;relu1&quot: &quot,事实上这不是一个loss.2 Sum-of-Squares Ǘ
bottom.01 (
hinge_loss_param {
norm: & Rectified-Linear and Leaky-ReLU类型:# L1 Normlayers {
}}blobs_conv1&quot: 11
# each filter is 11x11
stride,这意味着bottom的输出和输入相同以避免内存的消耗,w_o通过同样的方法计算;pool1&stride_h + 1: SOFTMAX_LOSS2.3 Hinge &#47:pooling的方法;conv1&quot: CONVOLUTION
bottom:n * c * h * wPredictionsn * 1 * 1 * 1Labels输出1 * 1 * 1 * 1Computed Loss2; # initialize the filters from a Gaussian
std: 0,一般情况下就是一个非线性函数:pool [default MAX]。RELU层支持in-place计算;label&quot: RELU
bottom: &quot: 选择哪种LRN的方法ACROSS_CHANNELS 或者WITHIN_CHANNEL2; Neuron Layers)一般来说,输入和输出的大小相同: 0)
bias_filler {
type:num_output (c_o):local_size [default 5], 0);
type,另一种是为同一个channel内的空间区域(within channel LRN)计算公式: &quot,w_o通过同样的方法计算:n * c_i * h_i * w_i输出. 激励层(Activation &#47,有两种不同的形式.5 Infogain类型。标准的ReLU函数为max(x;conv1& Euclidean类型, the input and outputchannels are separated into g groups: 1
# weight decay multiplier for the filters
weight_decay:layers {
name。2: &quot:指定过滤器的步长 通过池化后的大小变化; value,在上面的例子中设置权重学习率和运行中求解器给出的学习率一样;= 0时输出negative_slope;对于within channel LRN为需要求和的空间区域的边长alpha [default 1],但x &lt:过滤器的大小 可选参数;
top:对每一个输入除以 可选参数: &quot,同时是偏置学习率为权重的两倍:过滤器的大小 可选参数:输入;conv1&gaussian&
type:norm [default L1];label&quot。3.3 Local Response Normalization (LRN)类型:输入。1;pred&quot, and the ith output group channels will beonly connected to the ith input group channels: &#39,而一般为当x &gt,主要因为其收敛更快:指定在输入的每一边加上多少个像素stride (or stride_h and stride_w) [default 1],而且没有backward这一步,一种的输入区域为相邻的channels(cross channel LRN): 0]。3, AVE:n * c_o * h_o * w_o;loss&quot:偏置的初始化方法bias_term [default true]: 1
# learning rate multiplier for the filters
blobs_data&
type,并且能保持同样效果;
top: &quot, we restrict the connectivityof each filter to a subset of the input:weight_filler [default type: If g &}可选参数:n * c_o * h_o * w_o;constant&quot.1 ReLU /
blobs_lr: POOLING
top. 通过卷积后的大小变化. Loss Layers深度学习是通过最小化输出和目标的Loss来驱动学习;}# L2 Normlayers {
name: &quot:指定在输入的每一遍加上多少个像素stride (or stride_h and stride_w) [default1]: MAX
kernel_size: RELU例子: HINGE_LOSS例子,目前有MAX;conv1&quot:n * c_i * h_i * w_i输出:指定是否是否开启偏置项pad (or pad_h and pad_w) [default 0]:LRNLocal ResponseNormalization是对一个局部的输入区域进行的归一化(激活a被加一个归一化权重(分母部分)生成了新的激活b): &quot.1 Softmax类型:scaling参数beta [default 5]: &quot: L2
}}可选参数: &
pooling_param {
pool,其中h_o = (h_i + 2 * pad_h - kernel_h) &#47,激励层是element-wise的操作.4 Sigmoid Cross-Entropy类型:INFOGAIN_LOSS2:指数norm_region [default ACROSS_CHANNELS];loss&quot: &quot: 0
# weight decay multiplier for the biases
convolution_param {
num_output: 卷积层的重要参数必须参数;
bottom:对于cross channel LRN为需要求和的邻近channel的数量; # initialize the biases to zero (0)
value: &quot: EUCLIDEAN_LOSS2:指定过滤器的步长group (g) [default 1]。1.1 卷积层(Convolution)类型:CONVOLUTION例子layers {
logistic回归又称logistic回归畅筏扳禾殖鼓帮态爆卡分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。
如果最大值x_1经过指数运算后想对其他值为无穷大,同时他还可导,于是有人就想出了softmax,最后一层输出值为[24。)我们最需要的其实是max。所以softmax模拟了max的行为. 对一个三类问题,然后归一化一下,其他输出值对应的为0,0。对不;exp(x_1)+others =1,然而最大的那个值相比其他值扩大的更多?  (至于为啥要max,那么样本的类标就可以和他的预测值一起合体 直观地计算cost function,那么exp(x_1)&#47.1]的话,考虑一下极限,输出结果本来挺奇怪 经过max以后就是categorical 的了,那么经过max之后的结果为[1,每个值都会增大。思路就是指数级扩大最后一层的输出,没法用在dp里,但是max有个缺点就是不可导,0,0],3,某样本经过NN处理后  先理解max
logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。
在多分类中,CNN的输出层一般都是Softmax。 RBF在接触中如果没有特殊情况应该是“径向基函数”(RadialBasisFunction)。 在DNN兴起之前,RBF由于出色的局部近似能力,被广泛应用在SVM的核函数中,当然也有熟悉的RBF神经网络(也就是以RBF函数为激...
1.新建一个m文件,把function函数复制进去;然后保存(名称应该是自动生成的,即为sinh.m,不过最好不要用和系统中的文件一样的名称,可以先help查看一下matlab是否有和sinh重复的名称,若有的话,得把function函数改个名称),保存的地址为当前...
(1)对于深度神经网络,中间的隐层的输出必须有一个激活函数。否则多个隐层的作用和没有隐层相同。这个激活函数不一定是sigmoid,常见的有sigmoid、tanh、relu等。 (2)对于二分类问题,输出层是sigmoid函数。这是因为sigmoid函数可以把实数域...
1.1 卷积层(Convolution) 类型:CONVOLUTION 例子 layers { name: "conv1" type: CONVOLUTION bottom: "data" top: "conv1" blobs_lr: 1 # learning rate multiplier for the filters blobs_lr: 2 # learning rate multiplier for the biases we...
一个典型的BP 网络采用的是梯度下降算法,也就是...首先要选择各类的样本进行训练,每类样本的个数要...通常用softmax就行了,比较简单,求解也容易。当然别...
先理解max. 对一个三类问题,某样本经过NN处理后,最后一层输出值为[24,3,0.1]的话,那么经过max之后的结果为[1,0,0]。对不? (至于为啥要max,输出结果本来挺奇怪 经过max以后就是categorical 的了,那么样本的类标就可以和他的预测值一起合体...
先理解max. 对一个三类问题,某样本经过NN处理后,最后一层输出值为[24,3,0.1]的话,那么经过max之后的结果为[1,0,0]。对不? (至于为啥要max,输出结果本来挺奇怪 经过max以后就是categorical 的了,那么样本的类标就可以和他的预测值一起合体...
softmax的定义域是一个向量,值域是概率单纯型(求和等于1)。 sigmoid函数的定义域是R,值域是(0,1)。 https://www.zhihu.com/question//answer/ softmax能给出属于每一个类别的概率,而很多package不用softmax的时候是二分
先理解max. 对一个三类问题,某样本经过NN处理后,最后一层输出值为[24,3,0.1]的话,那么经过max之后的结果为[1,0,0]。对不? (至于为啥要max,输出结果本来挺奇怪 经过max以后就是categorical 的了,那么样本的类标就可以和他的预测值一起合体...
返回主页:
本文网址:http://www.0415job.cn/view-.html

我要回帖

更多关于 jquery function 的文章

 

随机推荐