前言
最近做的项目要结题了,发现中期之后啥都没干,赶紧从0开始学习模型融合和RNN的一些基本知识,先套个模型出来再说。
这里主要是在实验的传感器还没到之前搭的一个学习用的demo,走一遍训练的流程。
大致的模型框架是两个基分类器分别使用全连接神经网络和LSTM/GRU网络,然后将预测结果做concate后,送入个简单的softmax回归输出。由于实在是没法使用在线的MINIST,所以用了coursera ML课程中的的手写数据集。对,就是Ng的那个.mat文件,原始数据维度是5000x400。
整个的demo主要利用Keras实现,sklearn库做K折交叉验证的划分。由于个人刚接触,还是个菜鸡,对于stacking的理解并不到位,可能在meta-classifier上有问题,还请多多指正。
基分类器的搭建与训练
模型搭建
基分类器主要是全连接神经网络和LSTM/GRU,LSTM和GRU分别与全连接网络做stacking看最后结果。
首先是全连接网络,这个就比较简单,这里直接贴代码:
def FC_Model():
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(400,)))#input layer
model.add(tf.keras.layers.Dense(20,activation = 'relu',name = 'hidden_layer'))
model.add(tf.keras.layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
对于LSTM/GRU,大体的思路是:将一张图片的原始数据(400x1),变换为(20x20),将第一个20作为特征数目,第二个20作为时间步数,传入模型中训练。
Keras中LSTM/GRU层的第一个参数为units,即为隐藏单元的个数,关于这个的理解,可以参考这