基于深度学习的时间序列分类

  • 引言
  • 数据集
  • 实验环境搭建
  • 实验设计
  • 实验代码
  • 实验结果

引言

目前,深度学习在计算机视觉和语音识别上有了非常广泛的应用,但是在工业应用方面还没有完善的体系,一方面缺乏数据集另一方缺乏优秀的顶级论文。在工业上的故障诊断领域,大多数据都来自于传感器的采集,如是西储大学轴承数据,TE化工数据集等,都是典型的时间序列,因而绝大多数问题可以抽象成时间序列分类(TSC)问题。因此本人准备从时间序列分类出发,用典型的深度学习方法,如多层感知器,卷积神经网络,递归神经网络等去测试UCR数据集(共128个时间序列数据集)和自己仿真的时间序列,由此得到一些启发和规律,再将这些知识迁移到工业上的故障诊断领域。为了方便大家阅读和复现代码,本文就不再有过多的数学推到,多以代码和如何使用代码为主,用最直观的方式去解释一些实验结果。

数据集

在时间序列的数据集中,最权威的就属UCR Time Series,可以说是时间序列界的“Imagnet”,发文章必跑数据集,有一堆大牛在维护,并在2018年秋对其进行了意思大的更新。这个数据集很有意思,下载后解压密码要仔细读其PPT然后在其参考论文中寻找,如果想懒省事的朋友可以直接从这里下载。此数据集包含了128个时间序列数据集,下图为前八个

除了前人整理好的数据集数据集,我们在初期还可以自己设计一些简单的,容易识别的数据集来进行入门以及算法的初步筛选。不仅如此,为了探究模型结构的设计所考虑的因素或者验证自己的猜想,都需要有针对性的设计一些时间序列。比如一些单变量时间序列如:
方波,正弦波,锯齿波,等等,如下图所示

一些简单的多变量时间序列如下图所示

实验环境搭建

本文的实验使用python语言,所用的开发模型为Tensorflow和带有Tensorflow后端的Keras,所需的环境依赖如下:
1.tensorflow-gpu>=1.2.0
2.keras>=2.0.4
3.scipy
4.numpy
5.pandas
6.scikit-learn>=0.18.2
7.h5py
8.matplotlib
9.joblib>=0.12

尽管存在许多类型的DNN,但在此我们将重点关注用于TSC任务的三种主要DNN架构:多层感知器(MLP),卷积神经网络(CNN)和回声状态网络(ESN)。选择这三种类型的架构,因为它们是被广泛用于end to end深度学习TSC的模型。

实验设计

庞大的高楼是由一块块砖瓦搭建成的,同样的一个精妙的实验也是由一个个最基本的实验单元组成的。本文就如何使用一个数据集对设计好的神经网络进行训练进行设计。
1.选择你要进行训练的数据集,弄明白样本信息以及分类状况,本文以UCR数据集中的Adiac数据集为例进行实验。
数据集信如下:
自动硅藻识别和分类(ADIAC)项目是一项关于根据图像自动识别硅藻(单细胞藻类)的试点研究。 该数据由该项目的博士生Andrei Jalba捐赠,该项目于21世纪初完成。 从阈值图像中提取轮廓。 据推测,时间序列是作为到参考点的距离而生成的。 数据很接近正弦。一个样本如下图所示:


训练集样本个数:390
测试集样本个数:391
分类种类:39
时间序列长度:176

2.算法选择:
选择全卷积网络(FNC),具体结构如图所示:

3.评价网络

实验代码

把实验代码和数据集’Adiac’文件夹放到同一个目录里

#!/usr/bin/env
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 30 20:11:19 2016@author: stephen
"""from __future__ import print_functionfrom keras.models import Model
from keras.utils import np_utils
import numpy as np
import pandas as pd
import keras
from keras.callbacks import ReduceLROnPlateaudef readucr(filename):data = np.loadtxt(filename, delimiter = ',')Y = data[:,0]X = data[:,1:]return X, Ynb_epochs = 1000flist  = ['Adiac']
for each in flist:fname = eachx_train, y_train = readucr(fname+'/'+fname+'_TRAIN')x_test, y_test = readucr(fname+'/'+fname+'_TEST')nb_classes = len(np.unique(y_test))batch_size = min(x_train.shape[0]/10, 16)y_train = (y_train - y_train.min())/(y_train.max()-y_train.min())*(nb_classes-1)y_test = (y_test - y_test.min())/(y_test.max()-y_test.min())*(nb_classes-1)Y_train = np_utils.to_categorical(y_train, nb_classes)Y_test = np_utils.to_categorical(y_test, nb_classes)x_train_mean = x_train.mean()x_train_std = x_train.std()x_train = (x_train - x_train_mean)/(x_train_std)x_test = (x_test - x_train_mean)/(x_train_std)x_train = x_train.reshape(x_train.shape + (1,1,))x_test = x_test.reshape(x_test.shape + (1,1,))x = keras.layers.Input(x_train.shape[1:])
#    drop_out = Dropout(0.2)(x)conv1 = keras.layers.Conv2D(128, 8, 1, border_mode='same')(x)conv1 = keras.layers.normalization.BatchNormalization()(conv1)conv1 = keras.layers.Activation('relu')(conv1)#    drop_out = Dropout(0.2)(conv1)conv2 = keras.layers.Conv2D(256, 5, 1, border_mode='same')(conv1)conv2 = keras.layers.normalization.BatchNormalization()(conv2)conv2 = keras.layers.Activation('relu')(conv2)#    drop_out = Dropout(0.2)(conv2)conv3 = keras.layers.Conv2D(128, 3, 1, border_mode='same')(conv2)conv3 = keras.layers.normalization.BatchNormalization()(conv3)conv3 = keras.layers.Activation('relu')(conv3)full = keras.layers.pooling.GlobalAveragePooling2D()(conv3)    out = keras.layers.Dense(nb_classes, activation='softmax')(full)model = Model(input=x, output=out)optimizer = keras.optimizers.Adam()model.compile(loss='categorical_crossentropy',optimizer=optimizer,metrics=['accuracy'])reduce_lr = ReduceLROnPlateau(monitor = 'loss', factor=0.5,patience=50, min_lr=0.0001) history = model.fit(x_train, Y_train, batch_size=batch_size, nb_epoch=nb_epochs,verbose=1, validation_data=(x_test, Y_test), callbacks = [reduce_lr])model.save('FCN_CBF_1500.h5')
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']epochs = range(len(acc))plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()plt.figure()plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()plt.show()

实验结果

如果出现下图,那么你的第一次实验就完成了,完成了“helloworld”。那么接下来就是一个不断尝试新的网络结构,探究其结构和数据特性关系的过程了

下面是可视化结果

基于深度学习的时间序列分类[含代码]相关推荐

  1. Datawhale NLP入门:Task5 基于深度学习的文本分类2

    Task5 基于深度学习的文本分类2 在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习 ...

  2. Task5 基于深度学习的文本分类2

    Task5 基于深度学习的文本分类2 在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习 ...

  3. Datawhale零基础入门NLP day5/Task5基于深度学习的文本分类2

    基于深度学习的文本分类 本章将继续学习基于深度学习的文本分类. 学习目标 学习Word2Vec的使用和基础原理 学习使用TextCNN.TextRNN进行文本表示 学习使用HAN网络结构完成文本分类 ...

  4. Datawhale零基础入门NLP赛事 - Task5 基于深度学习的文本分类2

    在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习基于深度学习的文本分类. 学习目标 学 ...

  5. 新闻文本分类--任务5 基于深度学习的文本分类2

    Task5 基于深度学习的文本分类2 在上一章节,我们通过FastText快速实现了基于深度学习的文本分类模型,但是这个模型并不是最优的.在本章我们将继续深入. 基于深度学习的文本分类 本章将继续学习 ...

  6. 基于深度学习的细粒度分类调研1

    细粒度分类: 细粒度分类(识别)的概念其实非常简单,即模型需要识别非常精细的子类别.一般识别出物体的大类别(比如:计算机.手机.水杯等)较易,但如果进一步去判断更为精细化的物体分类名称,则难度极大. ...

  7. 自然语言处理入门实战3:基于深度学习的文本分类(2)

    基于深度学习的文本分类(2) 数据集 数据预处理 CNN模型 RNN模型 利用CNN模型进行训练和测试 利用RNN模型进行训练和测试 预测 总结 参考 本文主要是使用CNN和RNN进行文本分类操作. ...

  8. NLP-Beginner 任务二:基于深度学习的文本分类+pytorch(超详细!!)

    NLP-Beginner 任务二:基于深度学习的文本分类 传送门 一. 介绍 1.1 任务简介 1.2 数据集 1.3 流程介绍 二. 特征提取--Word embedding(词嵌入) 2.1 词嵌 ...

  9. 基于深度学习的文本分类 3

    基于深度学习的文本分类 Transformer Transformer是一种完全基于Attention机制来加速深度学习训练过程的算法模型,其最大的优势在于其在并行化处理上做出的贡献.换句话说,Tra ...

最新文章

  1. 怎么在html中写当前时间,当前时间(Javascript)在HTML
  2. JAVA之二叉查找树
  3. 只因写了一段爬虫,公司200多人被抓 ?
  4. 在VS.NET 的项目中使用生成事件
  5. python未来人工智能主流_python深度学习,未来人工智能三大境界的划分
  6. 微信公众平台二次开发 API开发 服务账号开发 订阅号开发
  7. jQuery源码学习之六 (jQUery中扩展方法)
  8. 分布式压缩感知 matlab程序,BCS_CODE 贝叶斯压缩感知以及分布式 的算法实现,很好的范例 matlab 238万源代码下载- www.pudn.com...
  9. 关于LNode 和* LinkList
  10. pygame 画图练习
  11. shotcut添加字幕
  12. 对于C语言中的指针**P的理解,C语言指针**p是什么意思
  13. 孙宇晨大举进驻NFT艺术的背后:区块链+艺术还能有怎样的玩法?
  14. 高数 | 精通中值定理 解题套路汇总
  15. 【Spring Boot】——集成JSON工具
  16. 全球与中国同心管换热器市场市场需求动态及十四五前景展望研究报告2022~2028年
  17. 从权限到shiro框架
  18. css 调用外部字体、自定义字体
  19. 使用zip,出现“不可预料的压缩文件末端”问题
  20. 数据结构--学生成绩管理系统(顺序表)

热门文章

  1. ATF:Gicv源码解读系列-gicv2_spis_configure_defaults
  2. C语言之逻辑移位与算术移位
  3. [JZOJ4274] 终章-剑之魂
  4. 基于航空RFID行李处理应用方案
  5. 优动漫PAINT中误删工具怎么办?
  6. 程序员转行量化交易可行吗?
  7. 基于E4A的蓝牙APP
  8. 关于阿里云ACP认证的那些事儿
  9. sqlsever2008 函数
  10. ZOJ1111 - Poker Hands