博客之初体验
第一篇博客,主要是比赛时候初次使用lstm做回归一些需要注意的点的小记。
1、数据准备。
你可能需要将数据中的缺失的特殊符号转化为Nan:
def catchAbnormal(num) :
if num in ['*','/']:
num =np.NaN
return num
for col in all_columns:
data[col] = data[col].apply(catchAbnormal)
对于一些重要的特征,数据集恰好部分值确实,占比还较大,需要进行确实值填充(如前面最近的一个值填充):
data.fillna(method='ffill',inplace=True)
#检查下填补的情况
print(data.isna().any())
数据归一化(对我自身算个trick,一开始深度模型预测值几乎没差别,汗。。。。)和one_hot处理
for i in train_columns:
dataX[i] = (dataX[i]-dataX[i].mean())/dataX[i].std(ddof=0)
#归一化并加入到训练集中
dataX = data_weather.join(pd.get_dummies(data_weather.iloc[:, 6:10]))
*最后一点,数据与label相关性查看很重要,哈哈。
2、模型训练部分
调参期间发现,优化器的选择对于最终结果的影响还比较大,先预留下后续深入研究具体原理(todo)。简单暴力的方法就是每个都尝试下,看哪个对于你的model的效果能好些。
# self.train_op = tf.train.AdamOptimizer(0.001).minimize(self.cost)
#self.train_op = tf.train.AdadeltaOptimizer(learning_rate=10, rho=0.95).minimize(self.cost)
# self.train_op = tf.train.RMSPropOptimizer(learning_rate=1, decay=0.9).minimize(self.cost)
self.train_op = tf.train.GradientDescentOptimizer(0.01).minimize(self.cost)
多层lstm的写法记录下(需要说明记录下:cell_outputs是最后一层每个时间步的输出(batchsize,timestep,cellsize),cell_final_state 为是每一层的最后一个step的输出(batchsize,layerNum,cellsize)):
lstm_cell = tf.contrib.rnn.BasicLSTMCell(self.cell_size, forget_bias=1.0, state_is_tuple=True,
activation=tf.nn.softsign)
mlstm_cell = tf.contrib.rnn.MultiRNNCell([lstm_cell] * layer_num, state_is_tuple=True)
self.cell_init_state = mlstm_cell.zero_state(self.batch_size, dtype=tf.float32)
self.cell_outputs, self.cell_final_state = tf.nn.dynamic_rnn(
mlstm_cell, self.l_in_y, initial_state=self.cell_init_state, time_major=False)
必要时需要dropout
self.pred = tf.nn.dropout(self.pred, keep_prob)
结尾
暂时就先这么多了吧,小记一下。
版权声明:本文为weixin_43586173原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。