1. 梯度爆炸问题
我最近研究多层LSTM在时序业务场景中的应用,如果基于Keras框架实现的时候,激活函数使用Relu,训练速度比较快而且效果也好,但是基于Tensorflow框架实现的时候,如果把激活函数由默认tanh换成Relu时,训练过程中出现了如下问题:
深度学习模型训练中途出现cost突然变大,或许几经周折降下来,不过大多数还是暴涨,出现了“nan”。
cost: 0.00532
......
cost: 1097.2125
cost: nan
cost: nan
复制代码
其中,激活函数设置如下:
#更换默认tanh激活函数
cell_list = tf.contrib.rnn.BasicLSTMCell(self.cell_size,
forget_bias=1.0,
state_is_tuple=True,
activation=tf.nn.relu)
复制代码
模型初始化权重:
def _weight_variable(self, shape, name='weights'):
initializer = tf.random_normal_initializer(mean=0., stddev=1.0,)
return tf.get_variable(shape=shape, initializer=initializer, name=name)
def _bias_variable(self, shape, name='biases'):
initializer = tf.constant_initializer(0.1)
return tf.get_variable(name=name, shape=shape, initializer=initializer)
复制代码
其实,出现这种问题是深度学习训练中常见的典型梯度爆炸问题。
2. 解决方案
2.1. 换回tanh激活函数?
本实践案例中,目标是采用的激活函数是Relu。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
相关推荐