keras学习笔记4——部分连接非共享权重层

来源:互联网 发布:电视机网络顶盒 编辑:程序博客网 时间:2024/04/30 07:57

最近一直在纠结一个问题,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找到了该层的实现方式(汗,可惜不是我写的),https://github.com/fchollet/keras/pull/2658,我期待keras的下一个升级版本将该层加入进去。
导入后,一个玩具式代码实现如下:

# training setx_test=np.random.random_sample((100,5,1))y_test=np.random.randint(2,size=100)# modelmodel=Sequential()model.add(local.LocallyConnected1D(nb_filter=1,filter_length=2,input_shape=(5,1)))model.add(Flatten())model.add(Dense(1))model.compile(optimizer='sgd', loss='mse')model.fit(x_test,y_test)

对利用神经网络处理时序数据感兴趣的可以联系我,共同交流,学习。
ps:keras上手真的很快,并且应付绝大部分任务需求足够了
另外,感谢nitish11在github上的帮助
参考
1. Learning Abstract Snippet Detectors with Temporal Embedding in Convolutional Neural Networks
2. https://github.com/fchollet/keras/pull/2658

0 0
原创粉丝点击