激活函数的作用
在神经网络中,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。
我们尝试引入非线性的因素,对样本进行分类。
在神经网络中也类似,我们需要引入一些非线性的因素,来更好地解决复杂的问题。而激活函数恰好就是那个能够帮助我们引入非线性因素的存在,使得我们的神经网络能够更好地解决较为复杂的问题。
常见的激活函数有Sigmoid,Relu,tanh等。
关于上述函数的公式,在此不赘述。
Sigmoid函数如下:
tanh函数如下:
Relu函数如下:
在Tensorflow中使用激活函数
以Relu函数为例:
import tensorflow as tf
# 默认Tensorflow会话
sess = tf.InteractiveSession()
# Relu函数处理负数
print("anwser 1:",tf.nn.relu(-2.9).eval())
# Relu函数处理正数
print("anwser 2:",tf.nn.relu(3.4).eval())
# 产生一个4x4的矩阵,满足均值为0,标准差为1的正态分布
a = tf.Variable(tf.random_normal([4,4],mean=0.0, stddev=1.0))
# 对所有变量进行初始化,这里对a进行初始化
tf.global_variables_initializer().run()
# 输出原始的a的值
print("原始矩阵:\n",a.eval())
# 对a使用Relu函数进行激活处理,将结果保存到b中
b = tf.nn.relu(a)
# 输出处理后的a,即b的值
print("Relu函数激活后的矩阵:\n",b.eval())
结果如下:(由于不同的机器,运行结果会有不同)
anwser 1: 0.0
anwser 2: 3.4
原始矩阵:
[[-0.42271236 0.70626765 0.4220579 -1.19738662]
[-0.09090481 1.20085275 -1.37331688 -0.28922254]
[-0.63343877 0.04532439 -0.98322827 -0.01032094]
[ 0.364104 1.00423157 0.23247592 -1.13028443]]
Relu函数激活后的矩阵:
[[ 0. 0.70626765 0.4220579 0. ]
[ 0. 1.20085275 0. 0. ]
[ 0. 0.04532439 0. 0. ]
[ 0.364104 1.00423157 0.23247592 0. ]]
可以发现,对于输入是一个数字来说,输出满足公式。对于输入参数是一个矩阵的情况,relu函数对矩阵中的每一个数字均使用了Relu函数进行处理,负数直接变为0.0,正数保持不变。
其他的激活函数亦是如此。