2.Methods

使用了Python和BRIAN模拟器。

在这里,我们描述:

  • 单个神经元和单个突触的动力学
  • 网络体系结构和使用的机制
  • MNIST的训练和分类过程。

2.1 神经元和突触模型

为了建模神经元动力学模型,我们选择LIF模型。其膜电位V描述如下:

:静息膜电位

:兴奋性突触的平衡电位

:抑制性突触的平衡电位

:兴奋性突触的电导

:抑制性突触的电导

:时间常数

正如在生物学中观察到的,我们使用时间常数τ,对于兴奋性神经元而言,其时间要长于抑制性神经元。

当神经元的膜电位超过其膜阈值时,神经元就会触发,其膜电位会重置为。 在重置后的几毫秒内,神经元处于其不应期,无法再次出现脉冲。

突触通过电导变化建模,即,当突触前突触到达突触时,突触会立即通过突触权重w增加其电导,否则电导将呈指数衰减。 如果突触前神经元是兴奋性的,则电导的动力学是

其中 是兴奋性突触后电位的时间常数。 类似地,如果突触前神经元具有抑制作用,则使用相同的方程式更新电导,但具有抑制性突触后电位 的时间常数。

我们在模拟中几乎所有参数都使用生物学上合理的范围,包括膜的时间常数,突触和学习窗口(Jug,2012年),但兴奋性神经元的膜电压的时间常数除外。将兴奋性神经元膜电位的时间常数增加到100毫秒(对于生物神经元通常观察到的10到20毫秒),大大提高了分类的准确性。原因是使用速率编码来表示输入,请参阅第2.5节,因此较长的神经元膜常数可以更好地估计输入峰值。例如,如果识别神经元只能以最大输入速率63.75 Hz整合20毫秒以上的输入,则该神经元平均只会整合超过1.275尖峰,这意味着单个噪声尖峰会产生很大的影响。通过将膜时间常数增加到100 ms,神经元平均可以积分超过6.375个尖峰,从而减少了噪声的影响。输入尖峰太少的问题仅存在,因为该体系结构使用的输入神经元的数量比生物学观察到的要少得多,从而提高了仿真速度。输入神经元数量的增加将允许相同的平均效果。

2.2 网络结构

网络由两层组成,如Figure 1。

图1 |网络架构。

将28×28像素MNIST图像的强度值转换为泊松峰,其发射速率与相应像素的强度成比例。那些泊松脉冲序列以all-to-all方式作为兴奋神经元的输入。

蓝色阴影区域显示了与一种特定的兴奋性示例神经元的输入连接。兴奋性神经元通过一对一连接与抑制性神经元相连,如示例性神经元所示。

红色阴影区域表示从一个抑制神经元到兴奋性神经元的所有连接。每个抑制性神经元都连接到所有兴奋性神经元,除了它从中接收连接的神经元。

类标签不会呈现给网络,因此学习不受监督。兴奋性神经元在训练后根据其在训练集中对数字类别的最高平均响应被分配到各个类别。没有额外的参数用于预测类别,特别是SNN之上没有线性分类器或类似方法。

第一层是输入层,包含28*28个神经元(每一个图像像素由一个神经元组成)

第二层是处理层,包含数量不定的兴奋性神经元和抑制性神经元。 每个输入都是一个Poisson脉冲序列,它被馈送到第二层的兴奋性神经元。 每个神经元的比率与示例图像中相应像素的强度成正比,请参见第2.5节。

第二层的兴奋性神经元以一对一(one-to-one)的方式连接到抑制性神经元,即,兴奋性神经元中的每个脉冲将触发其相应的抑制性神经元中的脉冲。 每个抑制性神经元都与所有兴奋性神经元相连,除了与之相连的神经元。 这种连通性提供了横向抑制,并导致兴奋性神经元之间的竞争。 抑制兴奋性突触的最大电导固定为10 nS。 但是,精确值对模拟结果影响不大,相反,必须平衡抑制性突触传导与兴奋性突触传导之间的比率,以确保横向抑制作用不会太弱,这意味着它没有任何抑制作用。 影响力,也不过分强大,这意味着一旦选择了获胜者,获胜者就会阻止其他神经元放电。

2.3 Learing

使用STDP学习从输入神经元到兴奋性神经元的所有突触。 为了提高仿真速度,使用突触轨迹计算权重动态(Morrison等,2007)。 这意味着,除了突触权重以外,每个突触都跟踪另一个值,即突触前踪迹xpre,该值模拟最近的突触前突增历史。 每次突触前突触到达突触时,轨迹增加1,否则xpre呈指数衰减。 当突触后突波到达突触时,根据突触前轨迹计算体重变化△w

其中η是学习速率,wmax是最大权重,µ确定更新对先前权重的依赖性。 xtar是突触后脉冲时刻突触前轨迹的目标值。目标值越高,突触权重就越低。此偏移量确保了很少导致突触后神经元放电的突触前神经元将变得越来越不连贯,如果突触后神经元仅很少活动,则尤其有用。通过向输入添加一些噪声并为学习规则添加权重降低机制(如在经典的STDP,Bi和Poo,1998年)以断开无关的输入,可以达到类似的效果。但是,在我们的仿真中,这是以增加仿真时间为代价的。学习规则类似于Querlioz等人使用的规则。 (2013年),但在这里我们使用指数时间依赖性,这在生物学上似乎比时间独立的权重变化更合理(Abbott和Song,1999年)。

为了将所选架构的鲁棒性与学习规则的确切形式进行比较,我们测试了其他三种STDP学习规则。 第二条STDP规则使用指数权重依赖性(Nessler等,2013; Querlioz等,2013)计算权重变化

其中β决定了权重依赖性的强度。

第三个规则不仅使用突触前轨迹,而且使用突触后轨迹,其工作方式与突触前轨迹相同,但其增加是由突触后尖峰触发的。 另外,对于此学习规则,突触前和突触后脉冲的权重发生变化。 突触前突触脉冲的权重变化△w

其中ηpre是突触前脉冲的学习率,µ决定了权重依赖性。 突触后脉冲的权重变化为

其中ηpost是学习率,wmax是最大权重,xtar是突触后脉冲时突触前轨迹的目标平均值。

此外,我们使用三重态STDP规则了解了网络的权重(Pfister和Gerstner,2006年)。 由于此规则不使用任何权重依赖性进行学习,因此我们要么需要将其纳入规则中,要么需要以其他形式限制权重。 在这里,我们使用除法权重归一化(Goodhill和Barrow,1994),这确保了神经元的平等使用。
请注意,power-low和指数权重依赖关系STDP规则的优点是,只有在突触后兴奋性神经元激发尖峰时才触发权重更新。 由于突触后神经元的激发速率非常低,因此用于突触后激发的更复杂的STDP更新不需要很多计算资源。 对称学习规则和三元组规则在计算上使用软件仿真(特别是对于较大的网络)进行仿真要昂贵得多,因为对于每个突触前事件,必须为每个单个突触后神经元计算权重变化。

2.4. Homoeostasis

输入的不均匀性导致兴奋性神经元的激发速率不同,并且横向抑制进一步增加了这种差异。然而,期望所有神经元具有近似相等的激发速率,以防止单个神经元支配反应模式并确保神经元的接受场分化。为了实现这一目标,我们采用了类似于固有塑性的自适应膜阈值(Zhang and Linden,2003)。具体来说,每个兴奋性神经元的膜阈值不仅由vthresh决定,而且由vthresh +θ决定,其中θ每次神经元发射时都会增加,并且呈指数衰减(Querlioz等,2013)。因此,神经元激发的次数越多,其膜阈值就会越高,因此神经元需要更多的输入以在不久的将来达到峰值。使用这种机制,由于基于电导的突触模型将最大膜电位限制为兴奋性逆转电位Eexc,因此神经元的激发速率受到限制,即,一旦神经元膜阈值接近Eexc(或更高),它将激发较少通常(甚至完全停止发射),直到θ充分减小为止。

2.5. Input Encoding

网络的输入基于MNIST数据集,该数据集包含60,000个训练示例和10,000个测试示例,这些示例包含数字0–9的28×28像素图像(LeCun等,1998)。 输入以Poisson分布尖峰序列的形式在350毫秒内呈现给网络,触发速率与MNIST图像像素的强度成比例。 具体来说,最大像素强度255除以4,导致输入激发率介于0到63.75 Hz之间。 另外,如果第二层中的兴奋性神经元在350毫秒内激发少于五个尖峰,则最大输入激发率将增加32 Hz,并且该示例将再次出现350毫秒。 重复该过程,直到在提出特定示例的整个过程中至少发射了五个脉冲为止。

2.6. Training and Classification

为了训练网络,我们将MNIST训练集中的数字(60,000个示例)呈现给网络。 在呈现新图像之前,存在一个150 ms的相位,没有任何输入,以允许所有神经元的所有变量衰减到其静止值(自适应阈值除外)。

训练完成后,我们将学习速率设置为零,固定每个神经元的峰值阈值,并根据每个神经元在一次训练集表示中对十个数字位的最高响应,为每个神经元分配一个类别。 这是使用标签的唯一步骤,即,在训练突触权重时,我们不使用标签。

然后,使用分类神经元的响应来测量MNIST测试集上的网络分类准确性(10,000个示例)。 通过平均每个类别的每个神经元的响应,然后选择具有最高平均放电率的类别来确定预测的数字。

3. Results

图2 训练结果

A)对于在10 x 10网格中具有100个兴奋神经元的网络,重新排列从输入到兴奋神经元的连接的权重(从784到28×28)。

B)表现为兴奋性神经元数目的函数。每个点表示整个MNIST测试集的十次演示的平均值,表示某个网络规模的性能,在此期间不进行学习。误差棒表示测试集的十个表示之间的标准偏差。每个学习规则的性能分别用黑色(幂律权重依赖关系STDP),红色(指数权重依赖关系STDP),绿色(前后STDP)和蓝色线(三重态STDP)表示。

C)训练准确性与所提供训练示例的关系。最后的10,000位数用于为当前10,000位数的神经元分配标签,例如,示例30,001–40,000用于分配标签,以对示例40,001–50,000进行分类。显示的是具有对称学习规则的1600兴奋性神经元网络的图形。

通过展示40,000个MNIST训练集示例,我们训练并测试了具有100个兴奋性神经元的网络。 产生的兴奋神经元权重的重新排列输入如图2A所示。 对于每个神经元,将784维输入向量重新排列为28×28矩阵,以可视化的方式显示神经元学习原型输入。
    除了100个神经元网络外,我们还通过展示整个MNIST训练集的3倍,7倍和15倍来训练和测试了400、1600和6400个兴奋性神经元的其他三个网络;对于幂律权重相关性STDP规则,这四个网络的平均分类准确率分别为82.9%,87.0、91.9和95.0%。对于所有模拟,我们使用相同的神经元,突触和STDP参数(自适应阈值和抑制强度的参数除外,必须对其进行调整以保持恒定的响应率)。精度是MNIST测试集的10,000个示例的十个表示形式的平均值,请参见图2B。由于MNIST测试集的强度图像已转换为泊松分布的尖峰序列,因此对于不同的尖峰定时,精度可能会有所不同。但是,整个测试集的十个表示(使用相同的经过训练的网络)的性能标准偏差很小(约0.1%),如图2B中的误差条所示。

其余三个学习规则的性能也显示在图2B中,其中指数权重依赖性显示为红色,使用前后STDP规则的性能显示为绿色,使用三重态STDP规则的性能显示在图2B中。 蓝色。 具有对称规则的1600个神经元网络的训练精度如图2C所示。 在大约200,000个示例之后,性能已接近其收敛;即使在100万个示例之后,性能也不会下降但仍保持稳定。 请注意,周期性结构归因于MNIST训练集的重复呈现。 所有网络规模和学习规则的趋势都是相同的。 但是,大型网络需要更长的培训时间才能达到最佳性能。

图3  错误分析。

A)在10,000个MNIST测试集数字的十次表示中,测试结果的平均混淆矩阵。 标识上的高值表示正确的标识,而其他位置的高值表示两个数字之间的混淆,例如数字4和9。

B)一种分类的所有495个错误分类的数字都覆盖了10,000个MNIST测试集的所有数字。 数字的像素越暗,其强度值越高,因此输入尖峰的频率越高。 这两个图均基于具有标准STDP规则的6400兴奋性神经元网络。

使用标准STDP规则对6400神经元网络进行错误分析,如图3所示。图3A显示了MNIST测试集的十个表示形式上的平均混淆矩阵,即,测试示例的每个分类都属于十个之一以10格为单位,其位置由实际数字和推论数字确定。毫不奇怪,在分类率为95%的情况下,大多数示例都在对应于正确分类的标识上。更有趣的是错误分类的示例。最常见的混淆是4被标识为9的57倍,被标识为7的≈40倍,而9被标识为2的≈26倍,而40被标识为2。虽然4和9以及7和2很容易混淆,但这似乎并不立即明显7可能会误认为9。可能的解释可以在图3B中看到。错误分类的7和典型的9之间的唯一区别通常是7中的中间水平笔画不与上笔画相连,这意味着感受力为9的神经元也可能会触发。

由于每个神经元仅对很小一部分输入数字做出响应,因此每个示例的响应非常稀疏,只触发了很少的尖峰信号。 即使在具有6400个兴奋性神经元的最大网络中,响应一位数字表示,也只会发射≈17个尖峰。 具体来说,对于正确识别的示例,从相同类别的神经元发射约16个尖峰,而从分配给不同类别的神经元发射约1个尖峰,而对于错误识别的示例,从正确类别的神经元发射约3个尖峰,而从12个尖峰发射 来自其他类别的神经元。

4. Discussion

4.1. Comparison

提出的网络使用SNN在MNIST基准上实现了良好的分类性能,并且具有在无监督的情况下对生物学上合理的成分进行学习的能力。表1显示了用于MNIST分类的尖峰神经网络的比较。在10,000位数的测试集上,差异为0.1%具有统计学意义(Larochelle等,2009)。请注意,Neftci等人(2013)和Hussain等人(2014)分别仅在1000和5000位数上测试了他们的网络。同样,Brader等人(2007年)使用10,000位数字进行测试,这些数字是从MNIST数据集中随机抽取的,而不是专用的MNIST测试集,后者测试的是记忆性而非泛化性。训练权重的一种常见方法是使用基于比率的算法,然后将这些训练后的权重转移到SNN中(在表1中称为“基于比率”的训练)。通常,用于这种基于速率的训练的训练过程基于机器学习中的流行模型,例如受限玻尔兹曼机(RBM)或卷积神经网络。使用此转换方法在MNIST基准上的最佳性能为99.1%(Diehl等人,2015)。另一种方法是使用基于峰值的训练过程来训练权重,通常依赖于STDP结合教学信号。使用我们的无监督训练方法,我们能够达到高达95%的分类精度,这显然比采用生物学上不太可行的方法的最佳加标网络要低,但是鉴于该网络的设计非常简单,因此存在改进的空间,例如定位感受野并增加层数以了解更多抽象特征。

Querlioz等人(2011a,2013)和Bichler等人(2012)使用Querlioz等人(2011b)中介绍的学习规则介绍了与我们类似的网络架构。他们与我们的网络之间的主要区别在于,我们展示了对不同学习规则的鲁棒性,并且我们使用了更具生物学意义的机制,包括基于指数电导的突触而不是基于电流的突触,指数形状的STDP时间窗而不是矩形的,并使用抑制指数电导施加抑制作用,而不是在预定的抑制时间内将突触后膜电压钳制到复位值。特别是后一种修改使学习变得更加困难,即,对于每个网络使用400个兴奋性神经元,Querlioz等人(2013)中的神经元的性能要比此处介绍的相同大小的神经元大2%。学习难度增加的可能原因是,在Querlioz等人(2013年)中,当Tinh等于神经元的不应期时,学习效果最佳,因此,在一个神经元激发后,所有神经元都有相同的激发机会。不应期。使用抑制性指数电导不可能轻易达到相同的效果,因为有必要同时微调抑制电导的时间常数,不应期和抑制性神经与兴奋性神经元的连接强度。即使实现了这样的微调,不在其不应期的神经元仍可以整合进入的兴奋电位,从而增加其放电的机会。

Masquelier和Thorpe(2007)和Kheradpisheh等人(2015)提出了另一种利用尖峰神经网络进行无监督学习的方法,他们将时间峰值编码与特征层次结构结合使用,从而在不同的视觉任务上甚至达到了出色的表现 3D对象识别中的深度卷积网络。

4.2. Inhibition

在当前的实现中,我们使用了与兴奋性神经元一样多的抑制性神经元,这样,兴奋性神经元的每个尖峰(间接)都会导致所有其他兴奋性神经元的抑制。我们选择了一种更为直接的软赢家通吃机制,以减少计算复杂性。通过将抑制性神经元的大池替换为较小的抑制性神经元池,以匹配生物学观察到的兴奋性与抑制性神经元的4:1比例,并使用从兴奋性至抑制性神经元。这将形成一个网络,其中兴奋性神经元的尖峰会导致对其他兴奋性神经元的不均匀抑制输入,因此可能会比其他神经元更喜欢某些神经元的激活。但是,自适应阈值可能会抵消某些影响,并且在大型网络中,这些影响应平均化,这意味着网络的性能应保持大致相同。

4.3. Spike-based Learning for Machine Learning

由于能耗是拥有大量数据的公司的主要成本因素(Barroso,2005年),因此有很大的动力来降低芯片的能耗。 目前在神经形态硬件上实现尖峰神经网络(SNN)(Indiveri等人,2006; Khan等人,2008; Benjamin等人,2014; Merolla等人,2014)仅使用几个nJ甚至pJ来传输尖峰(Merolla等人,2011) ; Park等人,2014; Mayr等人,2015)(对于某些设置,每个尖峰的能量仅为0.02 pJ,Azghadi等人,2014),每个突触仅消耗几pW的功率(Rahimi Azghadi等人,2014); 这些神经形态系统中的一些还提供了片上学习机制(Indiveri等人,2006; Diehl and Cook, 2014; Galluppi等人,2014)。

鉴于功耗极有可能成为将神经形态硬件与基于峰值的机器学习架构结合使用的主要原因之一,因此最好使用基于峰值的学习而不是基于速率的学习,因为学习过程本身具有高功耗(但是请注意,两种方法在测试期间都是基于尖峰的)。具体而言,当学习过程占用网络使用时间的很大一部分时,基于峰值的学习非常重要。需要基于峰值学习的另一种应用是对于必须动态适应其环境的系统,即当不足以一次训练系统并以预先训练的权重运行系统时。可能的示例包括预先训练但可适应用户口音的语音识别系统,或必须调整为特定视觉传感器的视觉处理器。这样的自适应视觉处理系统与诸如ATIS或DVS的尖峰视觉传感器(Lichtsteiner等人,2008年;Leñero-Bardallo等人,2010年; Posch等人,2010年)结合在一起,尤其令人感兴趣。端到端基于低功率峰值的视觉系统。如果我们的网络是在低功耗神经形态芯片上实现的(Indiveri等,2006; Khan等,2008; Benjamin等,2014; Merolla等,2014),则可以在非常低的功耗下运行功率预算;例如,使用IBM的TrueNorth芯片(Merolla等,2014),每100万个神经元消耗约72 mW的功率,网络消耗的功率不到1 mW。

4.4. Competitive Learning

直观地讲,网络的function类似于竞争性学习程序(McClelland等,1986),如self-organizing maps(Kohonen,1990)或neural-gas(Fritzke,1995),它们与k-means有共同的方面。这种类似于k均值的学习算法尤为有趣,因为最近已证明这种方法在复杂的机器学习任务中非常成功(Coates和Ng,2012)。可以在Habenschuss等人(2012)中找到对尖峰网络中期望最大化的深入分析。主要思想是每个神经元学习并代表一个原型输入或一些类似输入的平均值。每次提供输入时,网络都会确定与特定输入最相似的原型。然后将这些优胜者原型用于预测输入的类别,并对它们的权重进行调整,使它们变得与当前输入更加相似。在我们的网络中,这意味着每当一个神经元出现尖峰信号时,由于一个示例与其接受域足够相似,因此它将使其接受域与该示例更加相似。横向约束可以防止原型彼此变得过于相似(这意味着它们在输入空间中扩散),因为只有少数几个不同的神经元才能对每个示例做出反应,而只有少数几个神经元可以适应它们的实例。对它的接受领域。同质化可以被认为是在原型范围内保持大约恒定数量的示例的工具。在呈现与学习神经元一样多的不同输入示例的极端情况下,该网络更类似于k最近邻(kNN)。这暗示着,仅通过增加神经元的数量,此处呈现的体系结构的峰值性能可能约为95-97%,就像没有预处理的kNN方法一样(LeCun等,1998)。但是,通过使用与Coates和Ng(2012)相同的架构的更多层,可能有可能进一步提高性能。

4.5. Robustness of Learning

我们显示,使用四个不同的STDP规则以及横向抑制和同位顺则,所得网络具有相似的性能,并且随着时间的推移显示出非常稳定的学习效果。特别是后一种属性通常很难实现,因为许多网络往往会过度拟合数据,或者缺乏防止权重增长过多的机制。图2C显示,在展示了60,000个示例之后,该网络已经表现良好,但是即使展示了一百万个示例,该网络也没有表现出性能下降。网络性能随着时间的推移如此稳定的原因很可能是神经元之间的竞争,它迫使神经元学习尽可能不同的输入模式,以及学习的权重依赖性,如果权重过大,则权重就不会变大。输入模式不能反映出来。关于学习实例的数量和实现方式的变化,这种灵活性在实际的生物系统中至关重要,在该系统中,我们发现具有相同物种的不同动物的异质性细胞,甚至针对不同细胞的同一动物具有不同的特性。

我们系统的其他优点是可扩展性,可在计算成本和性能之间进行权衡以及在基于尖峰的无监督学习规则中的灵活性,可在不使用标签的情况下训练网络并仅使用几个标签将神经元分配给类。

Unsupervised learning of digit recognition using spike-timing-dependent plasticity相关推荐

  1. Spike Timing Dependent Plasticity(STDP)

    Spike Timing Dependent Plasticity(STDP) 1.典型原理: ​ 权重的更新依赖于突触前脉冲到达时间和突触后脉冲发射相对时序.根据上图所示,假设突触j的突触前脉冲到达 ...

  2. Paper Rewiew: Unsupervised Learning of Digit Recognition Using Spike-Timing-Dependent Plasticity

    Paeper Rewiew 文章信息 文章内容 背景 简介 主要工作及特点: 实验结果 设计细节 讨论 源代码的错误 其他 阅读时间:2017年12月 更新时间:2018年6月,合并了在<Fro ...

  3. Spike Timing–Dependent Plasticity: A Hebbian Learning Rule ///STDP时空依赖可塑性

    关键词 长期增强,长期抑郁,突触,记忆,反向传播动作电位 摘要 时空依赖可塑性(STDP)作为一种Hebbian突触学习规则,在从昆虫到人类的广泛物种的各种神经回路中得到了证明. 突触修饰依赖于突触前 ...

  4. Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)

    1    Unsupervised Learning 1.1    k-means clustering algorithm 1.1.1    算法思想 1.1.2    k-means的不足之处 1 ...

  5. Atrainable feature extractor for handwritten digit recognition(经典文章阅读)

    一.文献名字和作者 Atrainable feature extractor for handwritten digit recognition,Fabien Lauer, ChingY. Suen, ...

  6. 李宏毅深度学习--《Unsupervised Learning》+《PCA》+《Matrix Factorization》

    <Unsupervised Learning>+<PCA推导> Unsupervised Learning Clustering K-means Hierarchical Ag ...

  7. facebook新无监督论文-Unsupervised Learning of Visual Features by Contrasting Cluster Assignments

    最近比较关注无监督论文,因此只要发现有新的文章都会读一遍,facebook近期刚出了一篇Unsupervised Learning of Visual Features by Contrasting ...

  8. Machine Learning week 7 quiz: Unsupervised Learning

    Unsupervised Learning 5 试题 1. For which of the following tasks might K-means clustering be a suitabl ...

  9. ML之UL:无监督学习Unsupervised Learning的概念、应用、经典案例之详细攻略

    ML之UL:无监督学习Unsupervised Learning的概念.应用.经典案例之详细攻略 目录 无监督学习Unsupervised Learning的概念 无监督学习Unsupervised ...

最新文章

  1. 你会不会模拟超过 5 万用户的并发访问?
  2. Selenium之多窗口句柄的切换
  3. 简书python自动化运维_简明Python开发教程(4):网络自动化运维的曙光
  4. 数据结构 --静态队列 讲解
  5. git作死之天坑记录
  6. c++ 8.整数加法实现
  7. cpu线程测试软件,CPU多线程测试:wPrime/国际象棋
  8. 智慧楼宇物联网公司En-trak获Pre-A 轮融资
  9. 技能Get·手动更新HP笔记本BIOS过程记录
  10. c语言注释不能嵌套什么意思,C语言嵌套注释问题
  11. 紫光信息港 软件测试,紫光展锐 信息化软件工程师面经
  12. JVM核心内容详细讲解
  13. iOS - 二维码生成、扫描及页面跳转
  14. NotBlank问题解决
  15. 超好玩的模拟游戏:美国卡车模拟Mac中文版
  16. 运营商,我看未必成为夕阳行业
  17. 篱笆(Fenced In)
  18. mysql请输入一个有效类型的长度值_MySQL数据库基础(三)——SQL语言
  19. 罗马音平假名中文可复制_西方音乐史---古希腊、古罗马笔记
  20. 这里以Amlogic A113

热门文章

  1. 著名大型汽车冲压模具厂商Fuji Technica使用NCspeed为特斯拉提供最优质产品
  2. app offline.html,W3school HTML Offline
  3. mysql集群重启offline_集群各节点显示的状态均为OFFLINE
  4. Q Learnin 关于机器人在巡检与点检中的最佳路线获得
  5. 一看书就瞌睡,在学习编程中会遇见的一些问题
  6. 开始在NEC中国研究院做事,心情愉快
  7. 怎么把python代码发给别人_教你装逼了:怎么样发布你的 Python 代码给别人 “pip install”...
  8. 亚马逊mysql无法远程连接不上_亚马逊EC2 ubuntu下安装mysql远程无法连接问题o
  9. python 使用图云绘制文字画的效果 200309
  10. 二叉树的前序,中序,后序遍历