Python| TensorFlow nn.relu() 和 nn.leaky_relu()
Tensorflow 是谷歌开发的开源机器学习库。它的应用之一是开发深度神经网络。模块tensorflow.nn
为许多基本的神经网络操作提供支持。
激活函数是应用于神经网络层的输出的函数,然后将其作为输入传递给下一层。激活函数是神经网络的重要组成部分,因为它们提供非线性,没有它,神经网络会简化为单纯的逻辑回归模型。最广泛使用的激活函数是整流线性单元 (ReLU)。 ReLU 定义为 .由于以下原因,ReLU 近来成为一种流行的选择:
- 计算速度更快:ReLU 是一个高度简化的函数,易于计算。
- 更少的消失梯度:在机器学习中,对参数的更新与误差函数对该参数的偏导数成正比。如果梯度变得非常小,更新将无效,网络可能会完全停止训练。 ReLU 不会在正方向上饱和,而其他激活函数(如 sigmoid 和双曲正切)在两个方向上都会饱和。因此,它具有更少的消失梯度,从而导致更好的训练。
函数nn.relu()
为 Tensorflow 中的 ReLU 提供支持。
Syntax: tf.nn.relu(features, name=None)
Parameters:
features: A tensor of any of the following types: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
name (optional): The name for the operation.
Return type: A tensor with the same type as that of features.
# Importing the Tensorflow library
import tensorflow as tf
# A constant vector of size 6
a = tf.constant([1.0, -0.5, 3.4, -2.1, 0.0, -6.5], dtype = tf.float32)
# Applying the ReLu function and
# storing the result in 'b'
b = tf.nn.relu(a, name ='ReLU')
# Initiating a Tensorflow session
with tf.Session() as sess:
print('Input type:', a)
print('Input:', sess.run(a))
print('Return type:', b)
print('Output:', sess.run(b))
输出:
Input type: Tensor("Const_10:0", shape=(6, ), dtype=float32)
Input: [ 1. -0.5 3.4000001 -2.0999999 0. -6.5 ]
Return type: Tensor("ReLU_9:0", shape=(6, ), dtype=float32)
Output: [ 1. 0. 3.4000001 0. 0. 0. ]
泄漏的 ReLU:
ReLU函数存在所谓的“垂死的 ReLU”问题。由于 ReLU函数在负侧的斜率为零,因此卡在该侧的神经元不太可能从中恢复。这会导致神经元为每个输入输出零,从而使其无用。这个问题的一个解决方案是使用 Leaky ReLU,它在负侧有一个小斜率。
函数nn.leaky_relu()
为 Tensorflow 中的 ReLU 提供支持。
Syntax: tf.nn.leaky_relu(features, alpha, name=None)
Parameters:
features: A tensor of any of the following types: float32, float64, int32, uint8, int16, int8, int64, bfloat16, uint16, half, uint32, uint64.
alpha: The slope of the function for x < 0. Default value is 0.2.
name (optional): The name for the operation.
Return type: A tensor with the same type as that of features.
# Importing the Tensorflow library
import tensorflow as tf
# A constant vector of size 6
a = tf.constant([1.0, -0.5, 3.4, -2.1, 0.0, -6.5], dtype=tf.float32)
# Applying the Leaky ReLu function with
# slope 0.01 and storing the result in 'b'
b = tf.nn.leaky_relu(a, alpha=0.01, name='Leaky_ReLU')
# Initiating a Tensorflow session
with tf.Session() as sess:
print('Input type:', a)
print('Input:', sess.run(a))
print('Return type:', b)
print('Output:', sess.run(b))
输出:
Input type: Tensor("Const_2:0", shape=(6,), dtype=float32)
Input: [ 1. -0.5 3.4000001 -2.0999999 0. -6.5 ]
Return type: Tensor("Leaky_ReLU_1/Maximum:0", shape=(6,), dtype=float32)
Output: [ 1. -0.005 3.4000001 -0.021 0. -0.065 ]