加入收藏 | 设为首页 |

角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析

海外新闻 时间: 浏览:210 次
作者:Nils Ackermann
编译:ronghuaiyang

导读

许多文章重视二维卷积神经网络,主要是用于图画相关的问题。一维cnn在必定程度上也包括在内了,例如自然语言处理(NLP)。可是,关于你或许面对的其他机器学习问题,很少有文章供给关于怎么构建1D CNN的解说性的操作。本文企图补偿这一距离。

介绍

许多文章重视二维卷积神经网络,主要是用于图画相关的问题。一维cnn在必定程度上也包括在内了,例如自然语言处理(NLP)。可是,关于你或许面对的其他机器学习问题,很少有文章供给关于怎么构建1D CNN的解说性的操作。本文企图补偿这一距离。

什么时候运用1D CNN?

CNN能够很好地辨认数据中的简略形式,然后将其用于在更高的层中构成更杂乱的形式。当你期望从整个数据会集较短(固定长度)的片段中取得特征,而且该特征在片段中的方位相关性不高时,一维CNN十分有用角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析。

这能够很好地应用于剖析传感器数据的时刻序列(如陀螺仪或加速度计数据)。它也适用于剖析任何类型的信号数据在固定长度的周期(如音频信号)。另一个应用程角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析序是NLP(虽然这儿LSTM更有出路,由于单词的挨近程度或许并不总是可练习形式的杰出指示器)。

1D CNN和2D CNN之间有什么不同?

无论是一维、二维仍是三角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析维,CNNs都具有相同的特性,并遵从相同的办法。要害的差异在于输入数据的维数,以及特征检测器(或过滤器)怎么在数据之间滑动:

1D versus 2D CNN

问题描绘

在这篇文章中,咱们将专心于自于智能手机的时刻切片的加速度计和传感器数据。依据x轴、y轴和z轴的加速度计数据,1D CNN能够猜测用户正在进行的活动类型(如“漫步”、“慢跑”或“站立”)。关于各种活动,数据的每个时刻距离都相似于此。

加速度计数据的时刻序列样本

怎么在Python中构建1D CNN?

有许多规范的CNN模型可用。我挑选了Keras网站上描绘的一个模型(https://keras.io/getting-st角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析arted/sequential-model-guide/),并对其进行了细微修正,以习惯上面描绘的问题。下图供给了构建模型的高层概览。每一层都将作进一步解说。

1D CNN的比如

咱们先看看Python代码:

运转此代码将发生如下深度神经网络:

让咱们深化每一层看看发生了什么:

  • 输入数据:数据经过预处理,每个数据记载包括角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析80个时刻片(数据以20赫兹采样率记载,因而每个时刻距离包括加速度计读取的4秒数据)。在每个时刻距离内,存储x轴、y轴和z轴的三个加速度计值。这就得到了一个80x3矩阵。由于我通常在iOS中运用神经网络,所以数据有必要作为长度为240的平面向量传递到神经网络中。角头-介绍一下如何用一维卷积来做序列模型,根据Keras的具体代码解析网络的第一层有必要将其重塑为本来的形状,即80 x 3。
  • 第一个一维CNN层: 一个高度为10(也称为内核巨细)的过滤器(或也称为特征检测器)。只界说一个过滤器将答应神经网络学习第一层中的一个单一特征。这或许还不行,因而咱们将界说100个过滤器。这答应咱们在网络的第一层练习100个不同的特征。第一个神经网络层的输出是一个71 x 100的神经元矩阵。输出矩阵的每一列包括一个过滤器的权重。依据界说的内核巨细和考虑输入矩阵的长度,每个过滤器将包括71个权重。
  • 第二个一维CNN层:第一个CNN的成果将被输入第二个CNN层。咱们将再次界说100个不同的过滤器在这个等级上进行练习。依照与第一层相同的逻辑,输出矩阵的巨细将为62 x 100。
  • 最大池化层:通常在CNN层之后运用池化层,以下降输出的杂乱度,防止数据过拟合。在咱们的示例中,咱们挑选了尺度为3。这意味着该层的输出矩阵的巨细仅为输入矩阵的三分之一。
  • 第三和第四个一维CNN层:下面是一维CNN层的另一个序列,以便学习更高层次的特征。这两层之后的输出矩阵是一个2x160矩阵。
  • 均匀池化层:多一个池化层,进一步防止过拟合。这次不是取最大值,而是取神经网络中两个权值的均匀值。输出矩阵的巨细为1 x 160个神经元。每个特征检测器在这一层的神经网络中只剩下一个权值。
  • Dropout层: Dropout层将随机分配权值0给网络中的神经元。由于咱们挑选了0.5的概率,50%的神经元将人与牛取得0权值。经过这种操作,网络对数据中较小的改变不那么灵敏。因而,它应该进一步进步咱们对不行见数据的准确性。这一层的输出仍然是1160个神经元矩阵。
  • 运用Softmax激活的全衔接层:最终一层将高度160的向量削减到6,由于咱们要猜测6个类(“慢跑”、“坐下”、“行走”、“站立”、“上楼”、“下楼”)。这由一个矩阵乘法完结。运用Softmax作为激活函数。它使神经网络的一切6个输出加起来等于1。因而,输出值将表明这六个类中的每个类的概率。

练习和测验神经网络

下面是Python代码,用于练习批处理巨细为400、练习和验证巨细为80到20的模型。

该模型对练习数据的准确率到达97%。

将其与测验数据进行比较,准确率为92%。

Accuracy on test data: 0.92
Loss on test data: 0.39

考虑到咱们运用的是一个规范的一维CNN模型,这是一个很好的数字。咱们的模型在精确度、召回率和f1分上也得分很高。

下面扼要回忆一下这些分数的意义:

猜测 vs 成果 的矩阵

与测验数据相关联的混杂矩阵如下所示。

总结

在本文中,你能够看到怎么运用1D CNN练习网络,演示了一个依据智能手机上的一组加速度计数据猜测用户行为的示例。完好的Python代码能够在github:https://github.com/ni79ls/har-keras-cnn上找到。

英文原文:https://blog.goodaudience.com/introduction-to-1d-convolutional-neural-networks-in-keras-for-time-sequences-3a7ff801a2cf

请长按或扫描二维码重视本大众号