使用一维曲线玲珑Sequence-to-Sequence分类
这个例子展示了如何使用一个通用的每个时间步的序列数据分类时间卷积网络(TCN)。
而sequence-to-sequence任务通常与递归神经网络架构解决了,白等。[1]表明卷积神经网络可以匹配性能的复发性网络典型序列建模任务甚至超越他们。潜在好处利用卷积网络更好的并行性,更好地控制接受域大小,更好地控制内存占用的网络在训练和更稳定的梯度。就像复发性网络,卷积网络可以使用可变长度的输入序列,可以用来模拟sequence-to-sequence或sequence-to-one任务。
在本例中,您训练TCN识别活动的人穿着对身体的智能手机。你训练的网络使用时间序列数据代表三个方向的加速度计读数。
负荷训练数据
人类活动识别数据加载。传感器数据的数据包含七个时间序列来自智能手机戴在身体。每个序列有三个特性和不同长度。这三个特征对应于三个方向的加速度计读数。
s =负载(“HumanActivityTrain.mat”);XTrain = s.XTrain;TTrain = s.YTrain;
训练数据视图的观察。
numObservations =元素个数(XTrain)
numObservations = 6
在训练数据视图类的数量。
类=类别(TTrain {1});numClasses =元素个数(类)
numClasses = 5
训练数据的视图的数量特征。
numFeatures =大小(s.XTrain {1}, 1)
numFeatures = 3
想象训练序列的一个阴谋。情节的特点首先训练序列和相应的活动。
图为我= 1:3 X = s.XTrain{1}(我:);次要情节(4 1 i)情节(X) ylabel (“特性”+我+换行符+“加速”)结束次要情节(4,4)在情节(s.YTrain {1})从包含(“时间步”)ylabel (“活动”次要情节(4 1 1)标题(“训练序列1”)
定义深度学习模型
TCN是一个扩张的主要构建块因果卷积层,运营在每个时间步的序列。在这种背景下,“因果”意味着激活特定时间步计算不能依靠来自未来的时间激活步骤。
建立上下文从之前的时间步骤,多重卷积层通常是堆叠在彼此之上。实现大的接受域大小,随后的卷积层的膨胀系数是呈指数增加,如下图所示。假设的扩张因子k卷积层 步幅是1,那么这样一个网络的接受域大小可以计算 ,在那里 过滤器的大小和吗 是回旋的层数。改变滤波器的大小和层数很容易调整的接受域的大小和数量可学的参数作为数据和必要的任务。
tcn而复发性网络的缺点之一是,他们有更大的内存占用在推理。整个原始序列需要计算下一个时间步。减少推理时间和内存消耗,特别是提前预测,列车最小的合理的接受域的大小 并执行预测只有最后一个 输入序列的时间步骤。
一般TCN架构(如[1]所述)包含多个残块,每个包含两套扩张因果卷积层相同的膨胀因素,其次是规范化、ReLU激活和空间辍学层。网络增加了每个块的输入块的输出(包括1×1卷积在输入数量的输入和输出之间的通道不匹配)和应用最终激活功能。
定义一个网络包含四个剩余块系列,每双前一层的膨胀系数,从膨胀系数1。的残块,为一维卷积层指定64过滤器的过滤器尺寸5和0.005的辍学的因素空间辍学层。对于空间的辍学生,使用自定义层spatialDropoutLayer
附加到这个例子作为支持文件。金宝app进入这一层,打开这个例子作为一个活的脚本。
numFilters = 64;filterSize = 5;dropoutFactor = 0.005;numBlocks = 4;层= sequenceInputLayer (numFeatures正常化=“rescale-symmetric”、名称=“输入”);lgraph = layerGraph(层);outputName = layer.Name;为i = 1: numBlocks dilationFactor = 2 ^(张);层= [convolution1dLayer filterSize、numFilters DilationFactor = DilationFactor填充=“因果”、名称=“conv1_”+ i) layerNormalizationLayer spatialDropoutLayer dropoutFactor convolution1dLayer (filterSize、numFilters DilationFactor = DilationFactor填充=“因果”)layerNormalizationLayer reluLayer spatialDropoutLayer dropoutFactor additionLayer (Name =“加”+ i)];%添加和连接层。lgraph = addLayers (lgraph层);lgraph = connectLayers (lgraph outputName,“conv1_”+ i);%跳过连接。如果我= = 1%包括卷积先跳过连接。层= convolution1dLayer (1 numFilters Name =“convSkip”);lgraph = addLayers (lgraph层);lgraph = connectLayers (lgraph outputName,“convSkip”);lgraph = connectLayers (lgraph,“convSkip”,“加”+我+“/ in2”);其他的lgraph = connectLayers (lgraph outputName,“加”+我+“/ in2”);结束%更新层输出的名字。outputName =“加”+我;结束层= [fullyConnectedLayer (numClasses、名称=“俱乐部”)softmaxLayer classificationLayer];lgraph = addLayers (lgraph层);lgraph = connectLayers (lgraph outputName,“俱乐部”);
查看网络在一个阴谋。
图绘制(lgraph)标题(“时间卷积网络”)
指定培训选项
指定一组选项用于培训。
训练60时代mini-batch大小为1。
培训学习速率为0.001。
显示在一块训练进展和抑制详细的输出。
选择= trainingOptions (“亚当”,…MaxEpochs = 60,…miniBatchSize = 1,…情节=“训练进步”,…Verbose = 0);
火车模型
网= trainNetwork (XTrain TTrain、lgraph选项);
测试模型
测试模型的分类精度比较了测试集上的预测与真正的标签为每个时间步。
负载测试数据。
s =负载(“HumanActivityTest.mat”);XTest = s.XTest;tt = s.YTest;
使用训练网络通过使用作出预测分类
函数。
YPred =分类(净,XTest);
比较预测和相应的测试数据在一个阴谋。
图绘制(YPred {1},“。”)举行在情节(tt {1})从包含(“时间步”)ylabel (“活动”)传说([“预测”“测试数据”),位置=“东北”)标题(“测试序列预测”)
可视化预测混淆矩阵。
YPred图confusionchart (tt {1}, {1})
对分类精度进行比较预测测试标签。
精度=意味着(YPred {1} = = tt {1})
精度= 0.9919
引用
[1]巴姨,Shaojie, j .济科科特勒和Vladlen Koltun。“实证评估的通用卷积序列建模和复发性网络。2018年4月19日,“预印本,提交。https://arxiv.org/abs/1803.01271。
[2]Oord, Aaron van den桑德Dieleman, Heiga禅,Karen Simonyan Oriol Vinyals,亚历克斯坟墓,最终Kalchbrenner、安德鲁•高级和Koray Kavukcuoglu。“WaveNet:原始音频的生成模型。“预印本,提交2016年9月12日。https://arxiv.org/abs/1609.03499。
[3]Tompson乔纳森罗斯•Goroshin Arjun Jain, Yann LeCun (Christoph Bregler。“有效对象定位使用卷积网络。“2015年IEEE计算机视觉与模式识别会议(CVPR), 648 - 56。https://doi.org/10.1109/CVPR.2015.7298664。
另请参阅
convolution1dLayer
|trainingOptions
|trainNetwork
|sequenceInputLayer
|maxPooling1dLayer
|averagePooling1dLayer
|globalMaxPooling1dLayer
|globalAveragePooling1dLayer
相关的话题
- 使用一维卷积序列分类
- 使用深度学习序列分类
- 使用深度学习Sequence-to-Sequence分类
- 使用深度学习Sequence-to-Sequence回归
- 使用深度学习Sequence-to-One回归
- 使用深度学习时间序列预测
- 长期短期记忆网络
- 深度学习层的列表
- 深度学习技巧和窍门
另请参阅
dlnetwork
|dlarray
|adamupdate
|dlfeval
|dlgradient
|crossentropy
|minibatchqueue
|convolution1dLayer
|sequenceInputLayer
|maxPooling1dLayer
|averagePooling1dLayer
|globalMaxPooling1dLayer
|globalAveragePooling1dLayer