最近一直在纠结一个问题,n久没有解决,幸运的是终于在昨天取得了突破,以下就听我细细道来。
在工业应用中,模型效果的好坏主要取决于相关特征的提取,而在各类数据挖掘竞赛中,竞赛人员也将大部分比赛时间应用于此,特征提取工作的重要性在此体现的淋漓尽致。
在我们的日常生活中,有一种数据类型非常普遍,那就是时间序列数据,凡是与时间相关的具有前后顺序的数据均可称为时间序列数据,如天气变化、股市波动以及实体行为轨迹等。对于该类数据,如何兼顾时间因素,有效地对其特征进行提取是一个非常重要的问题。就目前而言,业内通常的处理方式是依靠业务人员的多年工作经验,手动提取特征,这种方式虽然有时比较准确、方便,但受限较大,对数据分析人员要求较高,既主观又无法深刻体现时间序列中相互依存的相关关系。
基于以上观点,Jiajun Liu在“Learning Abstract Snippet Detectors with Temporal Embedding in Convolutional Neural Networks” 中提出利用部分连接非共享权重的方式(长的与CNN中的卷基层比较像,但权重是非共享的)提取时间序列中蕴含的时序特征,通过实验证明了这种方式的有效性。
最近一段时间一直在探索利用keras实现上述算法,对keras框架有了更为清楚的认识。keras是一个基于Theano或Tensorflow的上层框架,上手极快,设计网络原型极其方便,但其对于学术研究人员有一个致命性缺陷,那就是灵活性不够,实现自己定义的层相当困难,必须对tensor相关语法非常熟悉才可,故学术研究人员还需兼修Theano或Tensorflow中的一种。
废话说了一大篇,部分连接非共享权重层样子如下:
有两大明显特征:部分连接、非共享权重,CNN卷基层的亲兄弟。
曾经尝试过自己定义该层,可惜因为对Tensor语法不了解,一直出错,again and again (应该学学Theano或Tensorflow了),比较幸运的是,与我有类似需求的人还是不少的,终于在github找到了该层