def prelu(self, _x):
alphas = tf.get_variable('alpha', _x.get_shape()[-1], initializer=tf.constant_initializer(0.0),
dtype=tf.float32)
pos = tf.nn.relu(_x)
neg = alphas * (_x - tf.abs(_x)) * 0.5
return pos + neg
上面这段代码是 prelu 在 tf 中的代码
三个激活函数的描述前面已经说过了,就不多说了,公式是 lrelu 的,lrelu 的 ai 是固定的值,prelu 的 ai 即负值的斜率是根据数据的训练而改变的,实际上是一种数据驱动式的参数设计,这种参数设计是很有启发性的,在诸多 attention 设计中屡见不鲜,rrelu 中的 ai 在训练时是从均匀分布中随机选择的数值,在测试时是固定的。
在代码中 alpha 的写法是值得注意的
alphas = tf.get_variable('alpha', _x.get_shape()[-1], initializer=tf.constant_initializer(0.0),dtype=tf.float32)