精华内容
下载资源
问答
  • pandas以及相关库的功能非常强大,但是老是用敲代码的方式不直观,...这里先实现一下显示数据框的内容,这是基础,下一步可以基于这个,用鼠标来干好多工作,总之尽量减少敲代码。 双击数据表格名称即可。 ...

    pandas以及相关库的功能非常强大,但是老是用敲代码的方式不直观,经常让人有点厌倦。这里先实现一下显示数据框的内容,这是基础,下一步可以基于这个,用鼠标来干好多工作,总之尽量减少敲代码。

    双击数据表格名称即可。

     

     

    展开全文
  • 做毕设的时候想实现如下相似效果,点击按钮才会显示下一步应该显示的内容,可以回到上一步。 一开始没有思路,在交流群问大神们,过了几分钟一位小姐姐给出的建议是: 1区用template来做,然后2区页面跳转,这种...

    做毕设的时候想实现如下相似效果,点击按钮才会显示下一步应该显示的内容,可以回到上一步。

    一开始没有思路,在交流群问大神们,过了几分钟一位小姐姐给出的建议是:

    1区用template来做,然后2区页面跳转,这种方式的确可行,但是懒惰的我根本不想弄那么多页面^_^.

    没有思路,只能无聊得拿页面点来点去,结果。。。还是没有思路。。。

    几天过后,点着首页的tab切换,虎躯一震,我可以用显示隐藏来实现呀!

    给按钮们绑定一個事件,分别用一个变量来记录当前按钮的id和当前要显示的box的id------currentId的,每次更新这个值,

    其他跟tab切换的原理差不多。

    效果图:

    上一步,下一步

    代码:

    <view id="findOuter">
        <!-- 选择登记类型 -->
        <view id="chooseType" class="{{currentBoxId == 'chooseType' ? 'show' : 'hidden'}}">
            <view id="one" class="fadeBox"></view>
            <button id="chooseTypenext" bindtap="changeBox">下一步</button>
        </view>
    
        <!-- 查看说明 -->
        <view id="viewInstruction" class="{{currentBoxId == 'viewInstruction' ? 'show' : 'hidden'}}">
            <view id="two" class="fadeBox"></view>
            <button id="viewInstructionPrev" bindtap="changeBox">上一步</button>
            <button id="viewInstructionNext" bindtap="changeBox">下一步</button>
        </view>
    
        <!-- 填写信息 -->
        <view id="fillInInformation" class="{{currentBoxId == 'fillInInformation' ? 'show' : 'hidden'}}">
            <view id="three" class="fadeBox"></view>
            <button id="fillInInformationPrev" bindtap="changeBox">上一步</button>
            <button id="fillInInformationNext" bindtap="changeBox">下一步</button>
        </view>
    
        <!-- 完成提示 -->
        <view id="finish" class="{{currentBoxId == 'finish' ? 'show' : 'hidden'}}">
            <view id="four" class="fadeBox"></view>
            <button id="finishPrev" bindtap="changeBox">上一步</button>
        </view>
    </view>
      data: {
        currentBoxId: 'chooseType', //当前显示的view的id
        isBoxShow: false
      },
      changeBox(e){
        let currentFlag = e.currentTarget.id;
        switch(currentFlag){
          case 'chooseTypenext':
            this.setData({
              currentBoxId: 'viewInstruction'
            })
            break;
          case 'viewInstructionPrev':
            this.setData({
              currentBoxId: 'chooseType'
            })
            break;
          case 'viewInstructionNext':
            this.setData({
              currentBoxId: 'fillInInformation'
            })
            break;
            case 'fillInInformationPrev':
              this.setData({
                currentBoxId: 'viewInstruction'
              })
              break;
            case 'fillInInformationNext':
              this.setData({
                currentBoxId: 'finish'
              })
              break;
            case 'finishPrev':
              this.setData({
                currentBoxId: 'fillInInformation'
              })
              break;
            default:
              this.setData({
                currentBoxId: 'viewInstruction'
              })
              break;
        }
    
      },
    .fadeBox{
        width: 100%;
        margin-bottom: 20rpx;
    }
    #one{
        background: #f00;
        height: 400rpx;
    }
    
    #two{
    
        background: #ff0;
        height: 800rpx;
    }
    
    #three{
        background: #f0f;
        height: 300rpx;
    }
    
    #four{
        background: #00f;  
        height: 600rpx;
    }
    
    button{
        background: #cfc;
        margin-bottom: 20rpx;
    }
    .show{
        display: flex;
        flex-wrap: wrap;
    }
    .hidden{
        display: none;
    }

     

    展开全文
  • 如何从RNN起步,一步一步通俗理解LSTM

    万次阅读 多人点赞 2019-05-06 23:47:54
    如何从RNN起步,一步一步通俗理解LSTM 前言 提到LSTM,之前学过的同学可能最先想到的是ChristopherOlah的博文《理解LSTM网络》,这篇文章确实厉害,网上流传也相当之广,而且当你看过了网上很多关于LSTM的文章...

                                 如何从RNN起步,一步一步通俗理解LSTM

     

     

    前言

    提到LSTM,之前学过的同学可能最先想到的是ChristopherOlah的博文《理解LSTM网络》,这篇文章确实厉害,网上流传也相当之广,而且当你看过了网上很多关于LSTM的文章之后,你会发现这篇文章确实经典。不过呢,如果你是第一次看LSTM,则原文可能会给你带来不少障碍:

    一者,一上来就干LSTM,不少读者可能还没理解好RNN。基于此,我们可以从最简单的单层网络开始学起;
    二者,原文没有对LSTM的三个门解释的足够细致,包括三个不同的sigmoid函数用的同一个符号σ(有错么?没错,看多了就会明白这是习惯用法);
    三者,不同的权值也用的同一个符号w,而当把图、公式、关系一一对应清楚后,初学就不会一脸懵逼了。甚至我们把各个式子的计算过程用有方向的水流表示出来,则会好懂不少,这个时候就可以上动图。

    而我自己就是这么经历过来的,虽然学过了不少模型/算法,但此前对LSTM依然很多不懂,包括一开始反复看ChristopherOlah博文《理解LSTM网络》,好在和我司AI Lab陈博士反复讨论之后,终于通了!

    侧面说明,当一个人冥思苦想想不通时,十之八九是因为看的资料不够通俗,如果还是不行,则问人,结果可能瞬间领悟,这便是教育的意义,也是我们做七月在线的巨大价值。

    众所周知,我们已经把SVM、CNN、xgboost、LSTM等很多技术,写的/讲的国内最通俗易懂了,接下来,我们要把BERT等技术也写的/讲的国内最通俗易懂,成为入门标准,而且不单单是从NNLM \rightarrow Word2Vec \rightarrow Seq2Seq \rightarrow Seq2Seq with Attention \rightarrow Transformer \rightarrow Elmo \rightarrow GPT \rightarrow BERT,我们希望给所有AI初学者铺路:一步一个台阶,而不是出现理解断层。

    本文在ChristopherOlah的博文及@Not_GOD 翻译的译文等文末参考文献的基础上做了大量便于理解的说明/注解(这些说明/注解是在其他文章里不轻易看到的),一切为更好懂。

     

    一、RNN

    1.1 从单层网络到经典的RNN结构
    在学习LSTM之前,得先学习RNN,而在学习RNN之前,首先要了解一下最基本的单层网络,它的结构如下图所示:

    输入是x,经过变换Wx+b和激活函数f,得到输出y。相信大家对这个已经非常熟悉了。

    在实际应用中,我们还会遇到很多序列形的数据:


    如:

    1. 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。
    2. 语音处理。此时,x1、x2、x3……是每帧的声音信号。
    3. 时间序列问题。例如每天的股票价格等等。

    而其中,序列形的数据就不太好用原始的神经网络处理了。

    为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。

    先从h_{1}的计算开始看:


    图示中记号的含义是:
    a)圆圈或方块表示的是向量。
    b)一个箭头就表示对该向量做一次变换。如上图中h_{0}x_{1}分别有一个箭头连接,就表示对h_{0}x_{1}各做了一次变换。
    在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。

    h_{2}的计算和h_{1}类似。但有两点需要注意下:

    1. 在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点,一定要牢记;
    2. 而下文马上要看到的LSTM中的权值则不共享,因为它是在两个不同的向量中。而RNN的权值为何共享呢?很简单,因为RNN的权值是在同一个向量中,只是不同时刻而已。


    依次计算剩下来的(使用相同的参数U、W、b):


    我们这里为了方便起见,只画出序列长度为4的情况,实际上,这个计算过程可以无限地持续下去。

    我们目前的RNN还没有输出,得到输出值的方法就是直接通过h进行计算:


    正如之前所说,一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1。

    剩下的输出类似进行(使用和y1同样的参数V和c):

    OK!大功告成!这就是最经典的RNN结构,是x1, x2, .....xn,输出为y1, y2, ...yn,也就是说,输入和输出序列必须要是等长的。

    1.2 RNN的应用
    人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义。我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。

    传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题:使用电影中先前的事件推断后续的事件。循环神经网络RNN解决了这个问题。

    通过上文第一节我们已经知道,RNN是包含循环的网络,在这个循环的结构中,每个神经网络的模块,读取某个输入,并输出一个值(注:输出之前由y表示,从此处起,改为隐层输出h表示),然后不断循环。循环可以使得信息可以从当前步传递到下一步。

    这些循环使得RNN看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:

    链式的特征揭示了RNN本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。

    1.3 RNN的局限:长期依赖(Long-TermDependencies)问题

    RNN的关键点之一就是他们可以用来连接先前的信息到当前的任务上,例如使用过去的视频段来推测对当前段的理解。如果RNN可以做到这个,他们就变得非常有用。但是真的可以么?答案是,还有很多依赖因素。

    有时候,我们仅仅需要知道先前的信息来执行当前的任务。例如,我们有一个语言模型用来基于先前的词来预测下一个词。如果我们试着预测“the clouds are in the sky”最后的词,我们并不再需要其他的信息,因为很显然下一个词应该是sky。在这样的场景中,相关的信息和预测的词位置之间的间隔是非常小的,RNN可以学会使用先前的信息。


    但是同样会有一些更加复杂的场景。假设我们试着去预测“I grew up in France...I speak fluent French”最后的词。当前的信息建议下一个词可能是一种语言的名字,但是如果我们需要弄清楚是什么语言,我们是需要先前提到的离当前位置很远的France的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。

    不幸的是,在这个间隔不断增大时,RNN会丧失学习到连接如此远的信息的能力。


    在理论上,RNN绝对可以处理这样的长期依赖问题。人们可以仔细挑选参数来解决这类问题中的最初级形式,但在实践中,RNN肯定不能够成功学习到这些知识。Bengio,etal.(1994)等人对该问题进行了深入的研究,他们发现一些使训练RNN变得非常困难的相当根本的原因。

    换句话说, RNN 会受到短时记忆的影响。如果一条序列足够长,那它们将很难将信息从较早的时间步传送到后面的时间步。

    因此,如果你正在尝试处理一段文本进行预测,RNN 可能从一开始就会遗漏重要信息。在反向传播期间(反向传播是一个很重要的核心议题,本质是通过不断缩小误差去更新权值,从而不断去修正拟合的函数),RNN 会面临梯度消失的问题。

    因为梯度是用于更新神经网络的权重值(新的权值 = 旧权值 - 学习率*梯度),梯度会随着时间的推移不断下降减少,而当梯度值变得非常小时,就不会继续学习。​

    换言之,在递归神经网络中,获得小梯度更新的层会停止学习—— 那些通常是较早的层。 由于这些层不学习,RNN 可以忘记它在较长序列中看到的内容,因此具有短时记忆。

    而梯度爆炸则是因为计算的难度越来越复杂导致。

    然而,幸运的是,有个RNN的变体——LSTM,可以在一定程度上解决梯度消失和梯度爆炸这两个问题!

     

     

    二、LSTM网络
    Long ShortTerm 网络——一般就叫做LSTM——是一种RNN特殊的类型,可以学习长期依赖信息。当然,LSTM和基线RNN并没有特别大的结构不同,但是它们用了不同的函数来计算隐状态。LSTM的“记忆”我们叫做细胞/cells,你可以直接把它们想做黑盒,这个黑盒的输入为前状态和当前输入。这些“细胞”会决定哪些之前的信息和状态需要保留/记住,而哪些要被抹去。实际的应用中发现,这种方式可以有效地保存很长时间之前的关联信息。

    2.1 什么是LSTM网络

    举个例子,当你想在网上购买生活用品时,一般都会查看一下此前已购买该商品用户的评价。


    当你浏览评论时,你的大脑下意识地只会记住重要的关键词,比如“amazing”和“awsome”这样的词汇,而不太会关心“this”、“give”、“all”、“should”等字样。如果朋友第二天问你用户评价都说了什么,那你可能不会一字不漏地记住它,而是会说出但大脑里记得的主要观点,比如“下次肯定还会来买”,那其他一些无关紧要的内容自然会从记忆中逐渐消失。

    而这基本上就像是 LSTM 或 GRU 所做的那样,它们可以学习只保留相关信息来进行预测,并忘记不相关的数据。简单说,因记忆能力有限,记住重要的,忘记无关紧要的。


    LSTM由Hochreiter&Schmidhuber(1997)提出,并在近期被AlexGraves进行了改良和推广。在很多问题,LSTM都取得相当巨大的成功,并得到了广泛的使用。
    LSTM通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是LSTM的默认行为,而非需要付出很大代价才能获得的能力!

    所有RNN都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个非常简单的结构,例如一个tanh层。

    激活函数 Tanh 作用在于帮助调节流经网络的值,使得数值始终限制在 -1 和 1 之间。


    LSTM同样是这样的结构,但是重复的模块拥有一个不同的结构。具体来说,RNN是重复单一的神经网络层,LSTM中的重复模块则包含四个交互的层,三个Sigmoid 和一个tanh层,并以一种非常特殊的方式进行交互。

    上图中,σ表示的Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息:

    • 因为任何数乘以 0 都得 0,这部分信息就会剔除掉;
    • 同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。

    相当于要么是1则记住,要么是0则忘掉,所以还是这个原则:因记忆能力有限,记住重要的,忘记无关紧要的

    此外,对于图中使用的各种元素的图标中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表pointwise的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。


    2.2 LSTM的核心思想
    LSTM的关键就是细胞状态,水平线在图上方贯穿运行。
    细胞状态类似于传送带。直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。

    LSTM有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法的非线性操作。

    如此,0代表“不许任何量通过”,1就指“允许任意量通过”!从而使得网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。

    LSTM拥有三种类型的门结构:遗忘门/忘记门、输入门和输出门,来保护和控制细胞状态。下面,我们来介绍这三个门。

     


    三、逐步理解LSTM
    3.1 忘记门
    在我们LSTM中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为“忘记门”的结构完成。该忘记门会读取上一个输出和当前输入,做一个Sigmoid 的非线性映射,然后输出一个向量f_{t}(该向量每一个维度的值都在0到1之间,1表示完全保留,0表示完全舍弃,相当于记住了重要的,忘记了无关紧要的),最后与细胞状态相乘。

    类比到语言模型的例子中,则是基于已经看到的预测下一个词。在这个问题中,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语,进而决定丢弃信息。

    大部分初学的读者看到这,可能会有所懵逼,没关系,我们分以下两个步骤理解:

    1. 对于上图右侧公式中的权值W_{f},准确的说其实是不共享,即是不一样的。有的同学可能第一反应是what?别急,我展开下你可能就瞬间清晰了,即:f_{t} = \sigma (W_{fh}h_{t-1} + W_{fx} x_{t} + b_{f})
    2. 至于右侧公式和左侧的图是怎样的一个一一对应关系呢?如果是用有方向的水流表示计算过程则将一目了然,上动图!红圈表示Sigmoid 激活函数,篮圈表示tanh 函数:


    3.2 输入门
    下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分:
    第一,sigmoid层称“输入门层”决定什么值我们将要更新;
    第二,一个tanh层创建一个新的候选值向量,会被加入到状态中。
    下一步,我们会讲这两个信息来产生对状态的更新。

    在我们语言模型的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语,进而确定更新的信息。

    继续分两个步骤来理解:

    1. 首先,为便于理解图中右侧的两个公式,我们展开下计算过程,即i_{t} = \sigma (W_{ih}h_{t-1} + W_{ix}x_{t} + b_{i})\tilde{C_{t}} = tanh(W_{Ch}h_{t-1} + W_{Cx}x_{t} + b_{C})
    2. 其次,上动图!


    3.3 细胞状态
    现在是更新旧细胞状态的时间了,更新为。前面的步骤已经决定了将会做什么,我们现在就是实际去完成。
    我们把旧状态与相乘,丢弃掉我们确定需要丢弃的信息。接着加上。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
    在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方,类似更新细胞状态。

    再次动图!


    3.4 输出门
    最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。

    首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。
    接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

    在语言模型的例子中,因为他就看到了一个代词,可能需要输出与一个动词相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化,进而输出信息。

    依然分两个步骤来理解:

    1. 展开图中右侧第一个公式,o_{t} = \sigma (W_{oh}h_{t-1} + W_{ox}x_{t} + b_{o})
    2. 最后一个动图:

     


    四、LSTM的变体
    我们到目前为止都还在介绍正常的LSTM。但是不是所有的LSTM都长成一个样子的。实际上,几乎所有包含LSTM的论文都采用了微小的变体。差异非常小,但是也值得拿出来讲一下。
    4.1 peephole连接与coupled
    其中一个流形的LSTM变体,就是由Gers&Schmidhuber(2000)提出的,增加了“peepholeconnection”。是说,我们让门层也会接受细胞状态的输入。

    peephole连接

    上面的图例中,我们增加了peephole到每个门上,但是许多论文会加入部分的peephole而非所有都加。

    另一个变体是通过使用coupled忘记和输入门。不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态。

     

    4.2 GRU
    另一个改动较大的变体是GatedRecurrentUnit(GRU),这是由Cho,etal.(2014)提出。它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的LSTM模型要简单,也是非常流行的变体。

    为了便于理解,我把上图右侧中的前三个公式展开一下

    1. z_{t} = \sigma (W_{zh}h_{t-1} + W_{zx}x_{t})
    2. r_{t} = \sigma (W_{rh}h_{t-1} + W_{rx}x_{t})
    3. \tilde{h} = tanh(W_{rh}(r_{t}h_{t-1}) + W_{x}x_{t})

    这里面有个小问题,眼尖的同学可能看到了,z_{t}r_{t}都是对h_{t-1}x_{t}做的Sigmoid非线性映射,那区别在哪呢?原因在于GRU把忘记门和输入门合二为一了,而z_{t}是属于要记住的,反过来1- z_{t}则是属于忘记的,相当于对输入h_{t-1}x_{t}做了一些更改/变化,而r_{t}则相当于先见之明的把输入h_{t-1}x_{t}z_{t}/1- z_{t}对其做更改/变化之前,先事先存一份原始的,最终在\tilde{h}那做一个tanh变化。

    这里只是部分流行的LSTM变体。当然还有很多其他的,如Yao,etal.(2015)提出的DepthGatedRNN。还有用一些完全不同的观点来解决长期依赖的问题,如Koutnik,etal.(2014)提出的ClockworkRNN。

    要问哪个变体是最好的?其中的差异性真的重要吗?Greff,etal.(2015)给出了流行变体的比较,结论是他们基本上是一样的。Jozefowicz,etal.(2015)则在超过1万种RNN架构上进行了测试,发现一些架构在某些任务上也取得了比LSTM更好的结果。

     

     

    五、LSTM相关面试题

    为帮助大家巩固以上的所学,且助力找AI工作的朋友,特从七月在线AI题库里抽取以下关于LSTM的典型面试题,更具体的答案参见:https://www.julyedu.com/search?words=LSTM(打开链接后,勾选“面试题”的tab)。

    1. LSTM结构推导,为什么比RNN好?
    2. GRU是什么?GRU对LSTM做了哪些改动?
    3. LSTM神经网络输入输出究竟是怎样的?
    4. 为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数,而不是选择统一一种sigmoid或者tanh?这样做的目的是什么?
    5. 如何修复梯度爆炸问题?
    6. 如何解决RNN梯度爆炸和弥散的问题?

     

     

    六、参考文献

    1. ChristopherOlah的博文《理解LSTM网络
    2. @Not_GOD 翻译ChristopherOlah的博文《理解LSTM网络
    3. RNN是怎么从单层网络一步一步构造的?
    4. 通过一张张动图形象的理解LSTM
    5. 如何理解LSTM网络(超经典的Christopher Olah的博文之July注解版)
    6. LSTM相关的典型面试题:https://www.julyedu.com/search?words=LSTM(打开链接后,勾选“面试题”的tab)
    7. 如何理解反向传播算法BackPropagation
    展开全文
  • mysql安装到最后一步无响应的问题解决,注册表也删了但是还是不行,求大神帮助
  • 1、File—>Settings,步骤如图: 2、然后重新打开idea工具,可以看到一个左箭头和一个右箭头,效果图如下:

    一、上一步和下一步操作添加到工具栏

    1、File—>Settings,步骤如下图:
    在这里插入图片描述2、添加完会在Toolbar Run Actions下看到【->Forward】和【<-Back】,如下图:
    在这里插入图片描述
    3、然后重新打开idea工具,可以看到一个左箭头和一个右箭头,效果图如下:
    在这里插入图片描述

    二、上一步和下一步快捷键

    1、添加到工具栏后,鼠标放在左箭头上会显示快捷键,如下图:

    Ctrl+Alt+向左箭头 表示返回上一步操作的位置

    在这里插入图片描述

    2、添加到工具栏后,鼠标放在右箭头上会显示快捷键,如下图:

    Ctrl+Alt+向右箭头 表示进入下一步操作的位置

    在这里插入图片描述

    展开全文
  • 一步一步理解欧拉公式

    万次阅读 多人点赞 2019-06-30 12:50:03
    如果你按这些步骤一步一步去做,先搞清什么,再搞清什么(可以从别的文章/知乎去明白),可能 最后就能看懂这个宇宙耍帅第一公式了 :) 本文不从泰勒展开角度来说明。 当x = 时: 一:搞清sin/cos的意义 ...
  • 程序员是如何一步一步被诈骗的?

    万次阅读 多人点赞 2020-05-01 09:50:59
    说已经进行了一半,现在不,待会又得从头开始等等,想着疫情期间大家出来工作都不容易,我就心软了,然后傻傻的被他牵引着继续往进行。 诈骗者的另一个圈套 于是他又换了一个方式,让我微信登陆,他说:你的微信...
  • 最近几天一直在swift,总算是跑起来了,因此跟大家分享,计划写三篇文章:swift代理节点配置、运行;swift存储节点安装、配置及运行;swift测试。这次安装共使用了四台服务器:一个代理节点(10.61.2.12,也是...
  • Android教程-从零开始一步一步接入SDK

    万次阅读 多人点赞 2014-08-29 00:28:10
    从零开始一步一步接入SDK
  • 诺基亚日本损落,下一步何去何从。前段时间小编坐了一回先知,预测了诺基亚已经走向了末路,而今天小编看到了诺基亚关闭了在日本的Vertu手机店。很多国人朋友可能还不知道Vertu手机店到底是个啥,小编我来简单的为...
  • CentOS6.2下一步一步源代码安装OpenStack(一)操作系统准备 与计算节点相关的部分我已经用蓝色字体标出。 2.时间同步、防火墙及selinux 2.1时间同步 计算节点要与控制节点通信,保持时间的同步很重要,...
  • 使用starUML一步一步画顺序图

    千次阅读 2018-06-13 20:35:05
    下面我们以一个简单的影院管理系统中售票功能为例来一步一步完成顺序图的构建。建模工具:starUML 版本:5.0.2.1570(新版本下面也适用) 1:首先确定功能的主功能场景如下所示。(1)顾客向售票员提供剧目名称,...
  • 一步一步 在mac上安装ubuntu

    万次阅读 2014-10-12 13:55:06
    做为程序员的你一定听说过Linux甚至非常喜欢Linux.最近买了一台mac air,我非常喜欢苹果的工艺,但作为屌丝...下面我就讲述一步一步在mac上安装ubuntu系统. 1 首先是下载bantu镜像,mac版本 2 打开终端
  • 一步一步写算法(之图创建)

    万次阅读 多人点赞 2011-10-31 21:30:41
    【 声明:版权所有,欢迎转载,请勿用于商业用途。... ... (2)想学好图,最好把前面的链表和指针搞清楚、扎实  (3)尽量写小函数,小函数构建大函数,方便阅读和调试
  • android一步一步实现视频客户端app
  • 从今天开始,一步一步的搭建一个web网站。计划采用前后端分离开发的方式。包含但不限于以下技术: springboot mybatisPlus redis shiro vue(暂定vue-element-admin) mysql mongodb springcloud(后续多系统分布式...
  • 一步一步写算法(之哈希二叉树)

    万次阅读 2011-10-24 19:45:27
     (1)哈希二叉树的思想比较重要,同学们最好清楚为什么要建立hash二叉树?  (2)上面的代码不是很完整,对hash表不熟悉的朋友可以参考我写的这一篇博客( hash表 ),二叉树添加删除不熟悉的朋友同样可以...
  • 一步一步教你用CSS画爱心

    万次阅读 2016-05-22 21:48:18
    一步一步教你用CSS画爱心 CSS有很多小魔法,今天就介绍一种画爱心的方法(是纯CSS画的哦)。网上有很多教程,但这个画法是本人原创哦~ ———————————来自北极熊猫的分割线——————————————— ...
  • 一步一步写算法(之洗牌算法)

    万次阅读 多人点赞 2011-10-10 19:59:03
     c)等到所有的索引牌都洗好之后,一副牌就好了  代码如下所示: void get_rand_number(int array[], int length) { int index; int value; int median; if(NULL == array || 0 == length) ...
  • 一步一步实现iOS QQ第三方登录

    千次阅读 2016-07-29 14:40:44
    一步一步实现iOS QQ第三方登录 字数1236 阅读167 评论6 喜欢2 前言 最近在公司应用中集成QQ登录的时候遇到一些波折(坑点),觉得还是有必要记录一下. 一.集成SDK 1.集成官方Framework 首先下载...
  • 一步一步教你使用uCOS-II

    万次阅读 多人点赞 2016-05-17 10:47:11
    指向一个空余内存控制块或者一个空余内存块的指针, Int32u osmemblksize ; 内存分区中内存块的大小,是建立内存分区时定义的。 Int32u osmemnblks ; 内存分区中总的内存块数量,也是建立该内存分区时...
  • 一步一步实现直播和弹幕

    万次阅读 2016-09-20 13:26:52
    最大的缺点就是稳定性,至少在我测试的时候也就是2016年9月份稳定性很差,不是说视频的稳定性,而是推流的稳定性,我有一台在同样的网络我的ViVO X7能推流,但是魅蓝NOTE2不能推流。然而ViVO X7推出去的流在电脑上...
  • 利用 TensorFlow 一步一步构建一个多任务学习模型 介绍 为什么是多任务学习? 当你在思考新事物的时候,他们通常会利用他们以前的经验和获得的知识来加速现在的学习过程。当我们学习一门新语言的时候,尤其是...
  • 公众号查题:一步一步搭建属于自己的查题

    千次阅读 多人点赞 2020-05-24 11:21:46
    前前后后大概了一个月,也没有大佬可以带,但我还是坚持下来了。一个月才一个公众号,对于大佬来说肯定觉得好LaJi哈哈哈哈!但还是因为爱好感兴趣,也值得了。若有大佬想带我的也可以聊聊哈,因为我有耐心,努力...
  • Hudson+tomcat 配置一步一步

    千次阅读 2010-05-20 16:46:00
    Author: 沈胜衣 In: JAVA, 软件行业QQ上有个小伙子想这么一个东西,我非高人,只是一个应用者,勉为其难,做一个图片的教程,安装 Hudson服务到Tomcat6.0下面,但愿能给兄弟们一些帮助。 首先我们需要准备材料 JDK...
  • [img=... vs2015在连接数据库,实体数据模型向导在选择完后点击下一步就闪退,了好几天了都不好,开始怀疑是vs自身问题,后来重装了也是不行,求各位大哥帮忙!
  • 一步一步教你做LIS接口教程(一)

    千次阅读 2015-08-02 18:48:25
    CS5100这次来了之后,我发现它变成了一个大家伙,以前凝血仪都是要放在桌子上的...废话少说,我们一步一步来研究这个接口这么做? 我们进入CS5100的设置界面后,发现他可以兼容多种协议,包括比较老一点版本的CA1000
  • [一步一步学react系列] 04—计算器Demo

    千次阅读 2018-01-10 13:49:41
    之前的例子都是写的计数器,加一减一的功能,我们大致懂了redux分层和store数据管理,下面我们将结合现有知识写一个终极版的计算器。以此巩固所学知识 知识点:redux分层,react-router,一些算法及数据结构...
  •  作者:清林,博客名:飞空静渡 这是一篇自己很早写的文章了,当时根据网上的一些教程一步一步制作,本来想把自己做的过程放到网上,可以西一值忙于公司项目,没有时间,去年想放上来的时候发现csdn上传不了图片,...
  • 闲得蛋疼 无聊寂寞冷 随便写写弄弄 看到网上蛮多搭建gstreamer开发环境 蛋疼的自己写个详细 记录一下 欢迎吐槽 有图有真相 1、打开Ubuntu Soft Center 2、打开libraries 3、输入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,818
精华内容 45,127
关键字:

下一步怎么弄