精华内容
下载资源
问答
  • 行业分类-电子电器-一种三端电源输入输出切换电路和装置.zip
  • 行业分类-电子电器-一新型工位刀闸切换操作装置机构.zip
  • 行业分类-设备装置-一紧凑型切换视场中波红外光学系统.zip
  • 行业分类-机械工程-一全稳态位四通旋转换向阀及其工作位切换方法.zip
  • 使用JQ来回切换样式的三种方法

    千次阅读 2017-07-25 19:04:22
    三种,点击来回跳转 <!DOCTYPE html > < html lang= "en" > < head > < meta charset= "UTF-8" > < style > div { height : 600 px ; width : 300 px ; background-color : ...

    方法一:使用JQ添加和删除相应样式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <style>
            div{
                height: 600px;
                width: 300px;
                background-color: orange;
            }
            .a{
                background-color: blue;
            }
        </style>
        <title>Title</title>
        <script src="jquery-3.1.1.min.js"></script>
    </head>
    <body>
    <div id="d">
        sakdas
    </div>
    </body>
    <script>
        $('#d').mouseover(function () {
            $(this).addClass('a')
        }).mouseout(function () {
            $(this).removeClass('a')
        })
    </script>
    </html>
    方法二:使用toggleClass,来回跳转样式

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <style>
            div{
                height: 600px;
                width: 300px;
                background-color: orange;
            }
            .a{
                background-color: blue;
            }
        </style>
        <title>Title</title>
        <script src="jquery-3.1.1.min.js"></script>
    </head>
    <body>
    <div id="d">
        sakdas
    </div>
    </body>
    <script>
        $('#d').mouseover(function () {
    //        俩个状态来回切换
            $(this).toggleClass('a')
        }).mouseout(function () {
            $(this).toggleClass('a')
        })
    </script>
    </html>
    第三种,点击来回跳转

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <style>
            div{
                height: 600px;
                width: 300px;
                background-color: orange;
            }
            .a{
                background-color: blue;
            }
        </style>
        <title>Title</title>
        <script src="jquery-3.1.1.min.js"></script>
    </head>
    <body>
    <div id="d">
        sakdas
    </div>
    </body>
    <script>
        $('#d').click(function () {
            $(this).toggleClass('a')
        })
    </script>
    </html>

    展开全文
  • 三种经典的图像分类的模型

    千次阅读 2019-04-24 11:16:26
    在VGG网络中从头到尾使用的是3x3的卷积核,使用这种小卷积核会带来两个主要的好处,在论文中一一提到了:一是两个3x3卷积具有和5x5卷积相同的感受野,个3x3卷积具有和7x7相同的感受野,但是与它们后者相比却增加了...

    1. VGG网络

    《Very Deep Convolutional Networks For Large Scale Image Recognition》

    In this work we investigate the effect of the convolutional network depth on its accuracy in the large-scale image recognition setting. Our main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3 × 3) convolution filters, which shows that a significant improvement on the prior-art configurations can be achieved by pushing the depth to 16–19 weight layers. These findings were the basis of our ImageNet Challenge 2014
    submission, where our team secured the first and the second places in the localisation and classification tracks respectively. We also show that our representations generalise well to other datasets, where they achieve state-of-the-art results. We have made our two best-performing ConvNet models publicly available to facilitate further research on the use of deep visual representations in computer vision.

    VGG网络分为VGG16和VGG19,16是指卷积层 + 全连接层, 池化层不包括进去,因为池化层没有参数需要进行训练。2.1Architecture提到在VGG中LRN(Local Response Normalization)局部响应归一化并没有起到提升性能的作用,反而增加了内存的消耗和计算时间。LRN在现在的网络中可能已经越来越不被使用了。

    All hidden layers are equipped with the rectification (ReLU (Krizhevsky et al., 2012)) non-linearity. We note that none of our networks (except for one) contain Local Response Normalisation (LRN) normalisation (Krizhevsky et al., 2012): as will be shown in Sect. 4, such normalisation does not improve the performance on the ILSVRC dataset, but leads to increased memory consumption and computation time. Where applicable, the parameters for the LRN layer are those of (Krizhevsky et al., 2012).

    在VGG网络中从头到尾使用的是3x3的卷积核,使用这种小卷积核会带来两个主要的好处,在论文中一一提到了:一是两个3x3卷积具有和5x5卷积相同的感受野,三个3x3卷积具有和7x7相同的感受野,但是与它们后者相比却增加了非线性Relu的个数,从而增加了决策函数的非线性;二是较少了参数数量(3x3x3<7x7)。同样地,1x1的卷积在有些地方保持输入和输出通道数一致,并没有起到降维减少参数的作用,但是却通过额外的Relu引入了非线性。非线性会使决策函数更容易进行区分(为什么)。

    Rather than using relatively large receptive fields in the first conv. layers (e.g. 11×11 with stride 4 in (Krizhevsky et al., 2012), or 7×7 with stride 2 in (Zeiler & Fergus, 2013; Sermanet et al., 2014)), we use very small 3 × 3 receptive fields throughout the whole net, which are convolved with the input at every pixel (with stride 1). It is easy to see that a stack of two 3×3 conv. layers (without spatial pooling in between) has an effective receptive field of 5×5; three such layers have a 7 × 7 effective receptive field. So what have we gained by using, for instance, a stack of three 3×3 conv. layers instead of a single 7×7 layer?

    • First, we incorporate three non-linear rectification layers instead of a single one, which makes the decision function more discriminative.
    • Second, we decrease the number of parameters: assuming that both the input and the output of a three-layer 3 × 3 convolution stack has C channels, the stack is parametrised by 3x3x3 C2 = 27C2 weights; at the same time, a single 7 × 7 conv. layer would require 7x7C2 = 49C2 parameters, i.e. 81% more. This can be seen as imposing a regularisation on the 7 × 7 conv. filters, forcing them to have a decomposition through the 3 × 3 filters (with non-linearity injected in between).
      The incorporation of 1 × 1 conv. layers (configuration C, Table 1) is a way to increase the nonlinearity of the decision function without affecting the receptive fields of the conv. layers. Even though in our case the 1 × 1 convolution is essentially a linear projection onto the space of the same dimensionality (the number of input and output channels is the same), an additional non-linearity is introduced by the rectification function. It should be noted that 1 × 1 conv. layers have recently been utilised in the “Network in Network” architecture of Lin et al. (2014).

    网络结构和参数量

    多尺度的数据裁剪

    在3.1Training中提到了通过在原始数据集上进行多尺度的数据裁剪,这也是数据增强的一种方式,代码如下:

    def _preprocess(image):
            image = tf.image.convert_image_dtype(image, dtype=tf.float32)
            image = tf.multiply(tf.subtract(image, 0.5), 2)
            image = tf.reshape(image, [64, 64, 3])
            image = tf.random_crop(image, [54, 54, 3])
            return image
    

    2.GoogLeNet网络

    googlenet的主要思想就是围绕这两个思路去做的:

    1. 深度,层数更深,文章采用了22层,为了避免上述提到的梯度消失问题,googlenet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。
    2. 宽度,增加了多种核 1x1,3x3,5x5,还有直接max pooling的,但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。

    《Going deeper with convolutions》在论文的摘要中提到了Hebbian Principle,Hebbian principle的精确表达就是如果两个神经元常常同时产生动作电位,或者说同时激动(fire),这两个神经元之间的连接就会变强,反之则变弱(neurons that fire together, wire together)。

    We propose a deep convolutional neural network architecture codenamed Inception that achieves the new state of the art for classification and detection in the ImageNet Large-Scale Visual Recognition Challenge 2014 (ILSVRC14). The main hallmark of this architecture is the improved utilization of the computing resources inside the network. By a carefully crafted design, we increased the depth and width of the network while keeping the computational budget constant.
    To optimize quality, the architectural decisions were based on the Hebbian principle and the intuition of multi-scale processing. One particular incarnation used in our submission for ILSVRC14 is called GoogLeNet, a 22 layers deep network, the quality of which is assessed in the context of classification and detection.

    GoogLeNet的层数达到了22Layers,但是却能使用比AlexNet少12倍的参数量。这里面的原因主要是虽然看上去GoogLeNet更宽更深,使用了更多的卷积,但是每一个Inception块的分支上都有1x1卷积,起到了非常大的降维的作用。 文章已开始就特意强调Hebbian Principle, 意思难道是尽管使用了Inception块,并且也使用了22Layers, 但是只有某些特定相关性比较强的层会被用于计算。

    Our GoogLeNet submission to ILSVRC 2014 actually uses 12 times fewer parameters than the winning architecture of Krizhevsky et al [9] from two years ago, while being significantly more accurate.

    不断增加网络的深度可以提高网络的性能,但随着网络层数的不断增加,会带来两个主要的问题:一是过拟合,训练数据不足;二是计算资源的浪费,因为网络中大量神经元激活函数的输出最后会变为零。

    • Bigger size typically means a larger number of parameters, which makes the enlarged network more prone to overfitting, especially if the number of labeled examples in the training set is limited. This is a major bottleneck as strongly labeled datasets are laborious and expensive to obtain, often requiring expert human raters to distinguish between various fine-grained visual categories such as those in ImageNet (even in the 1000-class ILSVRC subset) as shown in Figure 1.
    • The other drawback of uniformly increased network size is the dramatically increased use of computational resources. For example, in a deep vision network, if two convolutional layers are chained, any uniform increase in the number of their filters results in a quadratic increase of computation. If the added capacity is used inefficiently (for example, if most weights end up to be close to zero), then much of the computation is wasted. As the computational budget is always finite, an efficient distribution of computing resources is preferred to an indiscriminate increase of size, even when the main objective is to increase the quality of performance.

    解决这两个问题的方法:

    解决这两个问题的基本方法最终一般是把全连接改成稀疏连接的结构,甚至包括在卷积中也这么做。除了模拟生物系统,根据Arora【2】的突破性研究证明,这样做也可以在理论上获得更强健的系统。 Arora等人的主要结果显示如果数据集的概率分布是一个十分稀疏的大型神经网络所能表达的,那么最合适的网络拓扑结构可以通过分析每一步的最后一层激活函数的统计关联性,并将具有高相关性输出的神经元进行聚类,而将网络一层一层地搭建起来。虽然严格的数学证明需要很强的条件,但事实上这种情况符合著名的赫布原则——神经元如果激活条件相同,它们会彼此互联——这意味着在实践中,赫布原则在不那么严苛的条件下还是可以使用。【转自百度百科:Hebb学习规则是一个无监督学习规则,这种学习的结果是使网络能够提取训练集的统计特性,从而把输入信息按照它们的相似性程度划分为若干类。这一点与人类观察和认识世界的过程非常吻合,人类观察和认识世界在相当程度上就是在根据事物的统计特征进行分类。Hebb学习规则只根据神经元连接间的激活水平改变权值,因此这种方法又称为相关学习或并联习。】

    在论文的3.动机与高层设计考虑和4.结构细节 这两部分包含的理论深奥复杂,非常难以理解。应该重点理解它这里说的“局部最优的稀疏结构”,这种结构是通过卷积块的堆叠(Inception模块)来实现。

    3 动机与高层设计考虑
    最直接提高深度神经网络性能的方法是增加其规模,包括通过增加层数以增大深度,通过增加每一层的节点数以增加宽度。这是训练高质量模型最简单安全的方法,特别是对于给定的大规模标签数据集。然而这种简单的解决方法有两大缺陷。
    更大的网络规模往往意味着更多的参数,这使得扩大后的网络更易过拟合,特别是当训练集中的标签样例有限的时候。这能够变成一个主要的瓶颈,因为制作高质量的训练集是要技巧的,也是很昂贵的,特别是人类专家对于类别力度的准确把握对于ImageNet这样的数据集而言是很重要的(即使是ILSVRC的1000类子集),如图一所示。
    另一个统一增加网络大小的缺陷是计算资源需求的暴增。例如,在一个深度视觉网络,如果两个卷积层相连,任何增加过滤器数量的改动都会导致增加二次方倍数的计算量。如果增加的计算力没有被有效使用(比如大部分的权值趋于0),那么大量的计算会被浪费。实际应用中可用的计算力是有限的,即使是以提高模型质量为主要目标,高效分布计算资源,其实也比盲目增加网络体积更加有效。
    解决这两个问题的基本方法最终一般是把全连接改成稀疏连接的结构,甚至包括在卷积中也这么做。除了模拟生物系统,根据Arora【2】的突破性研究证明,这样做也可以在理论上获得更强健的系统。
    Arora等人的主要结果显示如果数据集的概率分布是一个十分稀疏的大型神经网络所能表达的,那么最合适的网络拓扑结构可以通过分析每一步的最后一层激活函数的统计关联性,并将具有高相关性输出的神经元进行聚类,而将网络一层一层地搭建起来。
    虽然严格的数学证明需要很强的条件,但事实上这种情况符合著名的赫布原则——神经元如果激活条件相同,它们会彼此互联——这意味着在实践中,赫布原则在不那么严苛的条件下还是可以使用。【转自百度百科:Hebb学习规则是一个无监督学习规则,这种学习的结果是使网络能够提取训练集的统计特性,从而把输入信息按照它们的相似性程度划分为若干类。这一点与人类观察和认识世界的过程非常吻合,人类观察和认识世界在相当程度上就是在根据事物的统计特征进行分类。Hebb学习规则只根据神经元连接间的激活水平改变权值,因此这种方法又称为相关学习或并联学习。】
    从负面而言,当涉及大量非统一的(non-uniform)稀疏的数据结构的计算时,现在的计算设施是很低效的。即使算术运算量降低100倍,查表运算和缓存失准(cache miss)也依然是主要瓶颈以至于稀疏矩阵的处理无法成功。如果使用稳定改进(steadily improving)、高度调制(highly tuned)、拥有大量库函数支持极快速密集矩阵相乘、关注CPU或GPU底层细节的方法,那么这种计算需求与计算资源之间的鸿沟甚至可能被进一步拉大。
    另外,非统一(non-uniform?异构????)的稀疏模型需要复杂的工程结构与计算结构。目前大部分面向机器学习的系统都利用卷积的优势在空间域中使用稀疏性。然而,卷积是通过一系列与前层区块的密集连接来实现的,文献【11】发表后,卷积神经网通常在特征维度中使用随机的稀疏的连接表,以打破对称性,提高学习水平,然而,根据文献【9】这种趋势会倒退回全连接模式,以便更好滴使用并行计算。
    统一的结构、巨大的过滤器数量和更大的批次(batch)规模将允许使用高效的密集矩阵运算。
    这就导致了一个问题,是不是存在一个中间步骤,如同理论上所显示的,能够让整个结构即使在过滤器层面上都能使用额外的稀疏性,但依旧是利用现有硬件进行密集矩阵计算【an architecture that makes use of the extra sparsity, even at filter level, as suggested by the theory, but exploits our current hardware by utilizing computations on dense matrices】。大量关于稀疏矩阵计算的文献,比如文献【3】,都显示将稀疏矩阵聚类到相对密集的子矩阵上能够让稀疏矩阵相乘的性能达到实用水平,把同样的方法应用到自动构建非统一深度学习结构上,在不远的将来看起来并不过分。
    Inception的体系结构始于第一作者研究的一个例子——评估复杂拓扑结构的网络算法的假设输出,尝试近似地用一个密集的可获得的组件表示一个文献【2】提出的视觉网络的稀疏结构的假设输出。
    然而这项工作在很大程度上是基于假设进行的,仅仅在两次迭代之后,我们就已经能够看到一些对于选定的拓扑结构非常不利的有限的成果【12】。在调节了学习速率、超系数,和采用了更好的训练方法之后,我们成功地建立了Inception的体系结构,使之能够在基于文献【5】和【6】提出的局部化和物体检测的上下文环境中非常好用。有趣的是,大多数最初的结构都被彻底地检测过,它们都至少能够达到局部最优。
    然而还是需要被谨慎考虑的是:虽然我们提出的体系结构在计算机视觉方面的应用很成功,但这能否归功于其背后的设计指导原则还不是很确定。
    想要确定这一点还需要更加彻底的分析和验证:比如,基于这些规则的自动化工具是否能够找到与之类似但却更好的网络拓扑结构。最有说服力的证据将会是自动化系统能够利用相同的算法在不同的领域创建出具有相似结果,但整体架构有很大不同的网络拓扑。
    最后,Inception最初的成功为探索这一领域让人激动的未来产生了巨大的动力。
    4 结构细节
    Inception的体系结构的主要设计思路是要在一个卷积视觉网络中寻找一个局部最优的稀疏结构,这个结构需要能够被可获得的密集组件(dense component)覆盖和近似表达。
    请注意,假定转义的不变性(translation invariance)意味着我们的网络将利用卷积砌块(convolutional building blocks)建立。我们所需要做的只是寻找局部最优化结构并在空间上对其进行重复。
    Arora等人在文献【2】中提出,一个逐层搭建的结构,需要分析其每一步的最后一层的统计关联性,并将高度相关的神经单元聚类为簇。
    这些簇组成了下一层的单元并与前一层的各个单元相连。
    我们假设前面一层的每个单元都对应输入图像的某些区域,而这些单元被分组分配给过滤器。在较低的层次(更靠近输入端),相关的单元聚焦于局部区域。这意味着我们能够得到大量聚焦于同一区域的簇,它们会被下一层的1×1卷积覆盖,如同文献【12】所述。然而,更少的在空间上传播更多的簇(a smaller number of more spatially spread out clusters)(这些簇会被区块更大的卷积所覆盖)是可以被期待的,这样的话,覆盖大型区域的区块数量就会减少。为了避免区块对齐问题(patch alignment issues),现有的Inception结构将过滤器大小限制为1×1,3×3 和 5×5,然而这种设定更多是为了方便而不是必要的。
    这也意味着合理的网络结构应该是将层次的输出过滤器bank结合起来,并将其合并为单一向量作为输出以及下一层的输入。
    另外,因为池化操作对于现有水平的卷积网络是很重要的,建议最好在每一部增加一条并行池化通路,这样应该也会有一些额外的好处:如图2a所示。
    Inception模块是一层一层往上栈式堆叠的,所以它们输出的关联性统计会产生变化:更高层抽象的特征会由更高层次所捕获,而它们的空间聚集度会随之降低,因为随着层次的升高,3×3和5×5的卷积的比例也会随之升高。
    一个大问题是,上述模型,至少是朴素形式(naive form)的模型,即使只有很有限个数的5×5卷积,其最上层卷积层的巨量过滤器的开支都会让人望而却步。一旦把池化层加进来,这个问题会变得更加严重:
    它们的输出过滤器个数与前面过程的过滤器个数相等。池化层输出与卷积层输出的合并会导致无法避免的每步输出暴增。
    即使是当这种结构覆盖了最优的稀疏结构,它可能依然还是很低效,从而导致少数几步的计算量就会爆炸式增长。
    这种情况导致我们提出了第二种设想:审慎地把降维和投影使用到所有计算量可能急剧增加的地方。
    这是基于嵌入的成功(success of embeddings)来设计的:相对于一个大型的图像区块,即使是低维的嵌入也可能包含大量的信息。
    然而,嵌入会把信息以一种致密的,压缩的方式展现出来,而压缩信息是很难被建模的。
    我们还是想在大部分位置保持稀疏性(如同文献【2】所要求的),而只在信号需要被聚合的时候压缩它们。
    也就是说,1×1卷积被用于在昂贵的3×3和5×5卷积之前降维。
    除了用于降维,它们也被用于数据线性修正激活(rectified linear activation),这使之具有双重使命。最后的结果如图2b。
    一般而言,一个Inception网络是由一系列上述结构栈式堆叠而成,有时候步长为2的最大池化层会把网络一分为二。
    出于技术原因(更高效的训练),只在高层使用Inception结构而把低层保留为传统的卷积模式似乎是有利的。
    这并不一定是必要的,只是反映了有些基础设施对于我们的设计而言很低效。
    这一结构一个有利的方面是它允许每一步的神经元大量增加,而不会导致计算复杂度的暴增。
    降维的普遍存在能够阻挡大量来自上一层的数据涌入下一层的过滤器,在大区块上对其进行卷积之前就对其进行降维。
    该设计另一个在实践中很有用的方面是,它与【视觉信息应该被多层次处理,然后被汇集到下面层次汇总,同时抽取多尺度特征】的特性相一致。
    计算资源的优化利用允许我们增加每层网络的宽度以及层数,而无需面对增加的计算困难。
    另一种使用Inception架构的方法是开发一种质量稍差,但计算起来更便宜的版本。
    我们已经发现,用于平衡计算资源的控制因素 可以使得我们的网络比表现相同(译者注:这里可能是指精确度)而不使用Inception结构的网络快2~3倍,只是这需要极为精细的人工调整。

    在这篇论文的9.结论中,进一步说明了Inception模块是在解决一个寻找局部最优的稀疏结构的问题。

    我们的结果似乎产生了一个坚实的结论——利用现有密集砌块逼近预想中的最佳稀疏结构,是一种可行的提高计算机视觉神经网络能力的方法。这种模型的主要优势是与浅层且较窄的网络相比,只要适度增加计算需求就能极大地提升质量。
    还请大家注意,我们的检测技术即使没有使用上下文和边界回归,依然很有竞争力,这一事实提供了进一步的证据证明Inception结构的强大。虽然相同质量的网络可以被同样宽度和深度的更昂贵的网络实现,我们的方法却切实地证明了切换到一个更稀疏的结构上是一个在普遍情况下可行且有用的方法。这意味着一个充满希望的未来——开发文献【2】提出的自动创建一个更稀疏,更有限的结构的方法。

    3. Residual Network

    假设在一个深度网络中,我们期望一个非线性单元(可以为一层或多层的卷积层)f(x, θ)去逼近一个目标函数为h(x)。如果将目标函数拆分成两部分: 恒等函数(Identity Function) x和残差函数(Residue Function) h(x) − x。根据通用近似定理,一个由神经网络构成的非线性单元有足够的能力来近似逼近原始目标函数或残差函数,但实际中后者更容易学习[He et al., 2016]。因此,原来的优化问题可以转换为:让非线性单元f(x, θ)去近似残差函数h(x)−x,并
    用f(x, θ) + x去逼近h(x)。

    《Deep Residual Learning For Image Reconnition》论文翻译

    摘要

    越深的神经网络训练起来越困难。本文展示了一种残差学习框架,能够简化使那些非常深的网络的训练,该框架使得层能根据其输入来学习残差函数而非原始函数(unreferenced functions)。本文提供了全面的依据表明,这些残差网络的优化更简单,而且能由更深的层来获得更高的准确率。本文在ImageNet数据集上使用了一个152层深的网络来评估我们的残差网络,虽然它相当于8倍深的VGG网络,但是在本文的框架中仍然只具有很低的复杂度。这些残差网络的一个组合模型(ensemble)在ImageNet测试集上的错误率仅为 3.57%。这个结果在2015年的ILSVRC分类任务上获得了第一名的成绩。我们在CIFAR-10上对100层和1000层的残差网络也进行了分析。表达的深度在很多视觉识别任务中具有非常核心的重要性。仅仅由于我们相当深的表达,便在COCO目标检测数据集上获得了 28% 的相对提升。 深度残差网络是我们参加ILSVRC & COCO 2015 竞赛上所使用模型的基础,并且我们在ImageNet检测、ImageNet定位、COCO检测以及COCO分割上均获得了第一名的成绩。

    网络退化问题

    在深度的重要性的驱使下,出现了一个新的问题:训练一个更好的网络是否和堆叠更多的层一样简单呢?解决这一问题的障碍便是困扰人们很久的梯度消失/梯度爆炸,这从一开始便阻碍了模型的收敛。归一初始化(normalized initialization)和中间归一化(intermediate normalization)在很大程度上解决了这一问题,它使得数十层的网络在反向传播的随机梯度下降(SGD)上能够收敛。
    当深层网络能够收敛时,一个退化问题又出现了:随着网络深度的增加,准确率达到饱和(不足为奇)然后迅速退化。意外的是,这种退化并不是由过拟合造成的,并且在一个合理的深度模型中增加更多的层却导致了更高的错误率,我们的实验也证明了这点

    参考资料

    查看常见的网络结构
    GoogLeNet学习

    展开全文
  • 上拉加载更多其实很简单,关键点只是知道上拉加载是变相的分页加载,然后通过初始化记录值和通过数组来保存加载过的数据(用户看回加载过的数据),同样的每行解析,分类切换的状态显示的想法是慕课网的七月讲师在...

    发现很多人对小程序的文章比较好奇,购物车那篇居然占了快三分一的访问量,因此写多篇关于小程序的常用功能。

    上拉加载更多其实很简单,关键点只是知道上拉加载是变相的分页加载,然后通过初始化记录值和通过数组来保存加载过的数据(用户看回加载过的数据),同样的每行解析,分类切换的状态显示的想法是慕课网的七月讲师在视频的想法。我这里简化一下。

        data: {
            begin: 0,
            goods_list_key:[]//上拉加载更多初始化
        },
        goodsBegin: function (catId) {//初始化首页商品展示
            var that = this;
            var begin = this.data.begin;//初始化时是零,后面通过上拉会不断叠加
            //console.log(begin);
            wx.request({
                url: 'https://www.xxxxxx/' + begin + '/' + catId,
                method: 'GET', 
                header: { 'content-type': 'application/json' },
                success: function (res) {
                    if(res.data ==""){//没有返回数据时的判断
                        wx.showToast({
                        title: '已加载完所有数据',
                        icon: 'success',
                        duration: 2000
                        })
                        //console.log(res.data);
                    /*
                    that.setData({
                    begin:0                    
                    })
                    */
                    }else{
        var goods_list_key=that.data.goods_list_key;//通过在小程序的data开数组进行保存,数组是专门处理数据保存的方法
        goods_list_key=goods_list_key.concat(res.data);//通过concat来合拼所有数组统一为一个数组
        for(var i=0;i<goods_list_key.length;i++){//对商品的价格进行小数点后两位的保留显示
       var costPrice= parseFloat(goods_list_key[i].costPrice);
       costPrice =costPrice.toFixed(2);
       goods_list_key[i].costPrice=costPrice;
        }
                   that.setData({//赋值
                        goods_list_key: goods_list_key
                    })
                    }
                }
            })
        },
        scrolltolower: function () {//上拉加载事件
            var begin = this.data.begin;//获取记录值,
            begin += 4;//自加
            this.setData({//更新记录值
                begin: begin
            });
            var catId = wx.getStorageSync('catId');//获取用户点击的分类缓存
            this.goodsBegin(catId);//执行加载数据函数
        },
        cateId: function (event) {//用户切换分类时,分类点亮的显示效果,商品显示初始化
            var catId = event.currentTarget.dataset.catId;//获取传过来的分类id
            wx.setStorageSync('catId', catId);//记录缓存。用于上拉加载事件用
            var catIds=new Array;//开数组对象
            catIds[catId]=true;//将获取的分类id记录到数组,并赋予状态
            this.setData({//将begin设回为0
            catIds:catIds,
            goods_list_key:[],//重置商品保存数组
            begin:0//初始化记录值
            });
            //wx.setStorageSync('catIds',catIds);
            this.goodsBegin(catId);//执行加载数据函数说
        }


    展开全文
  • 人工智能实验分类算法实验

    万次阅读 2019-04-14 17:19:14
    1、巩固4基本的分类算法的算法思想:朴素贝叶斯算法,决策树算法,人工神经网络,支持向量机算法; 2、能够使用现有的分类器算法代码进行分类操作; 3、学习如何调节算法的参数以提高分类性能; 二、实验硬件...

    一、实验目的

    1、巩固4种基本的分类算法的算法思想:朴素贝叶斯算法,决策树算法,人工神经网络,支持向量机算法;

    2、能够使用现有的分类器算法代码进行分类操作;

    3、学习如何调节算法的参数以提高分类性能;

     

    二、实验硬件软件平台

    硬件:计算机

    软件:操作系统:WINDOWS 

    应用软件:C,Java或者Matlab、Weka

     

    三、实验内容

    利用现有的分类器算法对文本数据集进行分类

    实验步骤:

    1.了解文本数据集的情况并阅读算法代码说明文档;

    2.利用文本数据集中的训练数据对算法进行参数学习;

    3.利用学习的分类器对测试数据集进行测试;

    4.统计测试结果;

     

    软件下载与安装;实验资料下载

    软件使用weka3.8,下载链接:https://sourceforge.net/projects/weka/,可以直接使用。

    实验资源下载:https://pan.baidu.com/s/1PqxBDF4pjcV1F63PXYJIOw 密码:r54q

    包含实验算法的原理讲解和arff格式的数据集。

     

    实验过程操作及现象

     

    1、数据集的获取及格式转换

     

    1.1 TXT文本转换为CSV

     

    Excel的XLS文件可以让多个二维表格放到不同的工作表(Sheet)中,我们只能把每个工作表存成不同的CSV文件。打开一个XLS文件并切换到需要转换的工作表,另存为CSV类型,点“确定”、“是”忽略提示即可完成操作。

    本次实验中提供的数据集data set是用逗号分隔的,可以使用Excel中的“导入数据”功能,最后另存为CSV。

     

    1.2 CSV转换为arff

     

    将CSV转换为ARFF最迅捷的办法是使用WEKA本身。

    在Explorer界面选择open file,然后打开CSV文件,选择save,保存格式选择arff,之后再点击open file打开arff文件即可。

    WEKA存储数据的格式是ARFF(Attribute-Relation File Format)文件,这是一种ASCII文本文件。它包含关系声明和属性声明。

     

    2、Weka的使用

    如图是进入软件的界面,点击explorer,我们实验的功能都在那个里面。

    点击open file,选择第一步中转换好的.arff格式的数据集导入,待界面上可以看到数据之后,点击右边的“Classify”,进行分类算法的测试。

    点击choose按钮,选择需要测试的算法,在test_options中选择算法的参数,在下拉列表中选择分类的关键依据参数,点击start即可完成分类的测试。

     

    3、各算法的测试

     

    3.1:分类关键依据的选定

    在导入好dataset之后,点击weka界面的最上面最右边的visualize,即可进入数据可视化界面,此时可以生成一张如上图所示的数据分布情况图(设定plotsize=100,pointsize和jitter向右拉满),点击Update。

    【注意,实验里面有三个数据集,建议使用dataset(总数据集),test(训练集),predict(测试集)】

    这个地方观察数据的总体分布状况,故用最全的dataset。

    观察图片,发现除了第一行的class values各个颜色的圈之间位置分布有较大差别,而其他属性,各个颜色的圈分布位置差别不大,因此,我们选用class values作为分类的依据,效果会比使用其他属性要好。

     

    3.2:分类及测试方法

     

    使用test作为数据集,共1349组数据;使用predict作为测试集,共377组数据。

     

    算法的选定、具体参数设置请看图。

    3.3:朴素贝叶斯

     

    训练过程:【点击Use traning set,注意导入的数据为test而非dataset】

    如果使用了dataset作为训练集,那么由于测试集predict也被包含在dataset这个总数据集里,测试出来的结果会正确率很高,但是也失去了意义,因为是自己测试自己。(之后的算法也是一样的)

    Correctly Classified Instances        	1191         	88.2876 %
    Incorrectly Classified Instances       	158          	11.7124 %
    Kappa statistic                      	0.6888
    Mean absolute error                  	0.0993
    Root mean squared error             	0.2053
    Relative absolute error               	48.4529 %
    Root relative squared error           	64.2275 %
    Total Number of Instances            	1349
    
    训练集分类正确率为88.2876%。

    测试过程:【测试集选定的时候,需要点击左边的Supplied test set右边的set按钮,选定predict为测试集,之后的算法相同】

    Correctly Classified Instances         	259               68.7003 %
    Incorrectly Classified Instances       	118               31.2997 %
    Kappa statistic                      	0.4326
    Mean absolute error                 	0.1631
    Root mean squared error             	0.3224
    Relative absolute error                	62.0086 %
    Root relative squared error            	80.52%
    Total Number of Instances            	377
    
    经过测试,得出朴素贝叶斯的正确率为68.7003%。

    3.4:决策树

     

    训练过程:

    Correctly Classified Instances        	1304          	96.6642 %
    Incorrectly Classified Instances        	45            	3.3358 %
    Kappa statistic                       	0.9189
    Mean absolute error                 	0.026 
    Root mean squared error              	0.1139
    Relative absolute error                	12.673 %
    Root relative squared error            	35.643 %
    Total Number of Instances            	1349
    
    决策树分类正确率为96.6642%。

    测试过程:

    Correctly Classified Instances         	256          	67.9045 %
    Incorrectly Classified Instances       	121           	32.0955 %
    Kappa statistic                      	0.4171
    Mean absolute error                 	0.1579
    Root mean squared error          	0.3684
    Relative absolute error                	60.0144%
    Root relative squared error            	91.997%
    Total Number of Instances            	377
    
    使用测试集,得出决策树的分类结果正确率为67.9045%。

    3.5:人工神经网络

     

    训练过程:

    Correctly Classified Instances        	1349           	100%
    Incorrectly Classified Instances        0              	0%
    Kappa statistic                       	1     
    Mean absolute error                     0.0018
    Root mean squared error             	0.0059
    Relative absolute error               	0.8944 %
    Root relative squared error            	1.8382 %
    Total Number of Instances            	1349
    
    使用人工神经网络算法,训练集上的分类正确率可以达到100%。

    测试过程:

    Correctly Classified Instances         	295            	78.2493 %
    Incorrectly Classified Instances        82             	21.7507 %
    Kappa statistic                      	0.6226
    Mean absolute error                  	0.1089
    Root mean squared error            	0.321 
    Relative absolute error              	41.3865 %
    Root relative squared error            	80.1692 %
    Total Number of Instances            	377
    
    使用人工神经网络,测试正确率达到了78.2493%。

    3.6:支持向量机

     

    训练过程:

    Correctly Classified Instances        	1282       		95.0334 %
    Incorrectly Classified Instances        67        		4.9666 %
    Kappa statistic                       	0.8795
    Mean absolute error                 	0.2543
    Root mean squared error              	0.3185
    Relative absolute error              	124.1183 %
    Root relative squared error         	99.6308 %
    Total Number of Instances           	1349
    
    支持向量机的分类正确率为95.1389%。

    测试过程:

    Correctly Classified Instances         	280          	74.2706 %
    Incorrectly Classified Instances        97             	25.7294 %
    Kappa statistic                       	0.5559
    Mean absolute error                 	0.2851
    Root mean squared error            	0.3618
    Relative absolute error                	108.4062 %
    Root relative squared error            	90.348 %
    Total Number of Instances             	377
    
    支持向量机算法的测试正确率为74.2706%。

     

    4、各算法原理(详细内容见上文链接中文档)

    这里就简单写一点介绍吧。。

     

    朴素贝叶斯

     

    朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。

    整个朴素贝叶斯分类分为三个阶段:

          第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

          第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

          第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

     

    决策树

     

    决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

    不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。

    ID3算法被用于选择属性度量。

     

    人工神经网络

     

    利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。这里的误差估计可以理解为某种偏导数,我们就是根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出误差。直到输出的误差达到符合的要求或者迭代次数溢出设定值。

    说来说去,“误差”这个词说的很多嘛,说明这个算法是不是跟误差有很大的关系?

    没错,BP的传播对象就是“误差”,传播目的就是得到所有层的估计误差。

    它的学习规则是:使用最速下降法,通过反向传播(就是一层一层往前传)不断调整网络的权值和阈值,最后使全局误差系数最小。

    它的学习本质就是:对各连接权值的动态调整。

     

    支持向量机

     

    支持向量机(Support Vector Machine ,SVM)的主要思想是:建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力。对于一个多维的样本集,系统随机产生一个超平面并不断移动,对样本进行分类,直到训练样本中属于不同类别的样本点正好位于该超平面的两侧,满足该条件的超平面可能有很多个,SVM正式在保证分类精度的同时,寻找到这样一个超平面,使得超平面两侧的空白区域最大化,从而实现对线性可分样本的最优分类。

     

    5、思考题:如何在参数学习或者其他方面提高算法的分类性能?

     

    以人工神经网络算法为例,调整学习相关参数,可以观察到如下结果。

    以上是设置学习时间为300的情况,可以看到均方根误差为0.0096,训练时间2.41秒。

    均方根误差是观测值与真值偏差的平方与观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替。对一组测量中的特大或特小误差反映非常敏感,所以,标准误差能够很好地反映出测量的精密度。因此这里我们使用均方差观察学习的准确性。

    以上是设置学习时间为1300的情况,可以看到均方根误差为0.0044,训练时间10.32秒。

    通过上述对比可以发现,训练时间越长,训练结果越准确,误差越低。这是因为随着训练时间的加长,迭代次数会越来越多,因此更容易接近实际准确情况。

    下面,我们研究比对学习率对于均方根误差的影响:

    以上是设置学习率为0.3的情况,训练时间设置为500,可以看到均方根误差为0.0073,实际训练时间为3.99秒。

    此时我们将学习率设置为0.6,发现均方根误差降低到了0.0051,同时实际训练时间略有提升,达到了4.26秒,但是,此时我们人为所设定的学习时间并没有变化,此时我认为这里的时间提升,大致可以归因为一个可以被允许的误差。

    而一味提升学习率就一定能够提升算法准确率吗?答案是否定的。因为学习率,又被成为“步长”。“步长”越大,每一次修改分类算法的关键参数的时候,这些参数的摆动幅度也就越大,因此,误差有可能随着学习率的提升而提升,而更为糟糕的是,学习率(步长)若过大,会使得算法在最优解附近不断来回摆动,因为步长太大的原因,算法参数无法收敛到全局最优,能否实际提升学习率是不确定的,全靠运气。

     

    综上所述,我认为提高算法性能主要有两个方面:如果只需要提高运行速度,可以降低迭代次数,但这样会导致模型的误差增大;如果需要提高模型的精确度,就需要适当更改学习率,且一定要增加迭代次数,但是如果是通过增加迭代次数的方法提升精确度,那么相应的算法时间开销就会不可避免地增大。因此,从参数的角度来考虑分类器的学习建模,我们需要权衡精确度和效率之间的关系。

    展开全文
  • 使用阿里的F2折线图,根据不同分类切换 图表切换不同数据展示,当切换三四个以上分类时,鼠标滑动图表会出现折线图错乱显示(当前分类数据与上一个分类数据交替出现 产生页面错乱抖动的感觉),点击到时不会出现抖动...
  • 局部ui界面切换解决方案

    千次阅读 2017-04-19 19:47:36
    这样的切换,其实是无限重复的一状态,写程序一定会遇到,NodePanels的功能就是要将这样重复的功能封装起来,下次遇到直接使用就可。要使用这个模块要进行如下的操作:首先在个面板身上都挂上一个NodePanel这个...
  • LTE切换

    千次阅读 2018-07-30 19:37:55
    测量过程主要包括以下个步骤:测量配置:由eNB通过RRCConnectionReconfigurtion消息携带的measConfig信元将测量配置消息通知给UE,即下发测量控制。测量执行:UE会对当前服务小区进行测量,并根据...
  • UE4流关卡与无缝地图切换总结

    万次阅读 多人点赞 2017-11-08 23:08:40
    目录 一.Level Streaming的使用与注意 流关卡的使用与注意 世界构成器 World Composition ....无缝地图切换 无缝切换流程 无缝切换时保存Actor 无缝切换时的一些问题与解决方法 一.Level S...
  • 小区切换

    千次阅读 2009-12-19 19:34:00
    在无线通信系统中,当移动台从一个小区(指基站或者基站的覆盖范围)移动到另一个小区时,为了保持移动用户的不中断通信需要进行的信道切换。如何成功并快捷地完成小区切换,是无线通信系统中蜂窝小区系统设计的重要...
  • 电子元器件知识,1月6日讯,电脑切换器又名KVM切换器,或者叫多电脑切换器,一般简称KVM,KVM为英语中键盘(Keyboard),显示器(Video)与鼠标(Mouse)等个单字字首的缩写。电脑切换器是一计算机外围硬件设备,可以...
  • iOS()实现App底部TabBar的切换:一

    千次阅读 2015-11-18 19:22:05
    分类 " , @" 个人 " ] ;   NSArray *imagearray= @[ @"home" , @"classify" , @"person" ] ;   NSMutableArray *UINavi=[[ NSMutableArray alloc ] initWithCapacity : 3 ];     ...
  • springboot-动态切换环境

    千次阅读 2019-02-27 13:22:01
     一般我们在开发中会有 开发、测试、预生产、生产环境的分类,这个时候我们会遇到在项目部署打包的时候需要动态的去切换环境,怎样去实现动态环境的切换呢?好了,废话不多说直接整干货。 1、首先我们在springboot...
  • vue手写分类折叠展开

    千次阅读 2018-09-10 17:42:10
    -- 遍历第层 --> {{child1.catename}} 启用'?'bgYes':'bgNo'">{{child1.enabled_text}} 这是逻辑层: 模拟数据(data里的数据): menulist:[{ catename:'水果', expanded:...
  • 第一卡片切换 demo.vue <view class="tab"> <view class="tabItem" :class="{'active' : 0 == current}" @click="clickTab(0)"> 自选 </view> <view class="tabItem" :class="{'...
  • LTE系统内切换流程分析

    万次阅读 多人点赞 2018-10-14 18:19:42
    UE在LTE系统内的移动性分为...移动性管理分类 花开两朵,各表一枝。我们先说切换流程。 当正在使用网络服务的UE从一个小区移动到另一个小区,或由于无线传输业务负荷量调整、激活操作维护、设备故障灯原因,为了...
  • 大概的需求是这个样子的,要做一个分类的页面。 下面来说一下思路吧! 先获取一级分类的数据,然后通过遍历得到头部的1级页面内容。 然后取第一个数据,获取他的二级页面的数据,还是通过遍历得到左边2级页面...
  • bug的几类型分类

    万次阅读 2018-12-04 12:07:40
    、功能优化 功能操作不方便、不合理的需要优化 四、交互逻辑 分为界面交互和功能交互:界面交互指的是页面的跳转;功能交互指的是通过和程序交谈(输入数据等操作)来控制程序,让程序得到你要的成果,常用...
  • React-native动态切换tab组件的方法

    千次阅读 2018-11-21 08:45:41
    在APP中免不了要使用tab组件,有的是tab切换,也有的是tab分类切换.这篇文章主要介绍了react-native动态...第一非常简单,同时大多数第方组件都能达到效果.这里重点讲述第二,我们要让第二组件不仅能左右滑动,...
  • VLAN的三种类型及三种属性

    千次阅读 2017-01-25 09:35:00
    转载于:https://www.cnblogs.com/hester/p/6349071.html
  • ubuntu设置代理 的三种方式

    万次阅读 2016-09-07 20:54:18
    转载自:... ubuntu下设置代理 2010-01-11 20:13:20|分类:ubuntu总结|标签:|字号大中小订阅 一、代理上网: 方法一 这是一临时的手段,如果您仅仅是暂时需要通过http代理使用apt-get,您可以使用
  • 这里主要用到了swiper组件和三目运算,直接上代码, 样式只有个class,简单粗暴,懒的小伙伴们可以直接拿来用,喜欢的点个支持 <view> <view class="swiper-tab"> <view cla...
  • 时间系统、进程的调度与切换

    千次阅读 多人点赞 2013-09-16 19:13:24
    注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入...
  • Verilog有限状态机的三种描述

    千次阅读 2015-07-27 01:52:39
    三种描述主要根据其输入、输出和状态来分类。   一段式状态机:一段式状态机只选择一个状态标志位,这个状态标志位会在输入的决定下选择跳转到下一个状态还是维持原有状态,在每一个状态下检测状态标志位及输入...
  • flutter(四)底部tabbar,顶部切换,页面跳转 上篇文章为大家讲述了flutter的组件;(动态组件和静态组件)本篇文章接着上篇内容继续为大家介绍flutter的其他主要组件(底部选项卡,顶部切换等等实用组件),本文...
  • 仿美团,饿了吗两个ListView联动,左边点击切换右边,右边滑动切换左边
  • git中branch有三种类型

    千次阅读 2018-07-05 14:26:28
    git中branch有三种类型:local branch本地分支,就是我们平常操作的分支,git中默认是master分支创建分支: git branch b1切换分支: git checkout b1remote branch它实际上是指向远端服务器的某个分支,用来跟踪...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 118,099
精华内容 47,239
关键字:

切换的三种分类