引言
目前,深度学习在计算机视觉和语音识别上有了非常广泛的应用,但是在工业应用方面还没有完善的体系,一方面缺乏数据集另一方缺乏优秀的顶级论文。在工业上的故障诊断领域,大多数据都来自于传感器的采集,如是西储大学轴承数据,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_function
from keras.models import Model
from keras.utils import np_utils
import numpy as np
import pandas as pd
import keras
from keras.callbacks import ReduceLROnPlateau
def readucr(filename):
data = np.loadtxt(filename, delimiter = ',')
Y = data[:,0]
X