我如何在tensorflow.keras中激活Relu?

时间:2018-12-12 01:23:47

标签: tensorflow keras

我现在正在代理DQN。 我实现了这样的Relu激活功能:

self.model = tf.keras.Sequential([
    tf.keras.layers.Dense(20),
    tf.keras.layers.ReLU(),
    tf.keras.layers.Dense(self.action_size)
])

当我计算梯度时,某些梯度变为零。 我认为这是因为RELU。 所以我将其更改为:

self.model = tf.keras.Sequential([
    tf.keras.layers.Dense(20),
    tf.keras.layers.LeakyReLU(),
    tf.keras.layers.Dense(self.action_size)
])

然后效果很好。

但是当我使这段代码成为这样的低级张量流时:

self.X = tf.placeholder(tf.float32,[None,self.state_size])
self.layer1=tf.layers.dense(self.X,20,activation=tf.nn.relu)
self.output_layer = tf.layers.dense(self.layer1,self.action_size)
self.Y = tf.placeholder(tf.float32,[None,self.action_size])

relu激活效果很好。我的意思是梯度并非全为零。 我不知道为什么第一次执行的结果与最后一次执行的结果不一样。

1 个答案:

答案 0 :(得分:0)

有不同的ReLU函数:LeakyLeakyReLU和Parametric PReLU以及keras中的默认ReLU。您需要检查这两个的默认参数是什么。例如:keras.layers.LeakyReLU的默认参数alpha为0.3。

梯度可能会变为0,因为神经元参数在一开始就被随机设置了,这可能会导致您遇到问题。