Python画Sigmoid、Relu、Softmax、Tanh、Leaky relu等函数(1)

本文深入探讨了深度学习中常用的激活函数,包括阶跃、Sigmoid、Tanh、ReLU及其变种Leaky ReLU,并通过Python实现这些函数的可视化。此外,还介绍了矩阵乘法的基本操作以及在三层神经网络中的应用,最后讲解了Softmax函数的原理与实现,旨在帮助读者理解神经网络的基础组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看鱼书有感,记录一下:

1.阶跃函数

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def step_fun(x):
    #先把array转为int
    return np.array(x>0,dtype=np.int)

x=np.arange(-5.0,5.0,0.1)
y=step_fun(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#设置y轴范围
plt.show()

在这里插入图片描述

2.Sigmoid函数(少用,会发生梯度消失)

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
    return 1/(1+np.exp(-x))

x=np.arange(-5.0,5.0,0.1)
y=sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)#设置y轴范围
plt.show()

Sigmoid

向这个转换器输入某个值后,输出值是输入值的常数倍的函数称为线性函数(用数学
式表示为h(x) = cx。c为常数)。因此,线性函数是一条笔直的直线。而非线性函数,顾名思义,指的是不像线性函数那样呈现出一条直线的函数。

3.Tanh函数

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
    return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
x=np.arange(-5.0,5.0,0.1)
y=tanh(x)
plt.plot(x,y)
plt.show()

在这里插入图片描述

4.Relu函数

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
def relu(x):
    return np.maximum(0,x)

x=np.arange(-5.0,5.0,0.1)
y=relu(x)
plt.plot(x,y)
plt.show()

Relu
数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”。

5.Leaky relu

在这里插入图片描述
在relu的负轴*0.01而已

import numpy as np
import matplotlib.pyplot as plt
def Leaky_relu(x):
    return np.maximum(0.01*x,x)

x=np.arange(-5.0,5.0,0.1)
y=Leaky_relu(x)
plt.plot(x,y)
plt.show()

在这里插入图片描述

6.矩阵乘法

import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
print(np.dot(a,b))

输出: [[19 22]
[43 50]]

3行两列的矩阵eg: np.array([[1,2], [3,4], [5,6]]),并不是三维矩阵

7.三层神经网络的实现(输入+隐藏层*2+输出层)

import numpy as np
def sigmoid(x):
    return 1/(1+np.exp(-x))
x=np.array([1.0,0.5])
w1=np.array([[0.1,0.3,0.5],[0.2,0.4,0.6]])
b1=np.array([0.1,0.2,0.3])
a1=np.dot(x,w1)+b1
z1=sigmoid(a1)

w2=np.array([[0.1,0.4],[0.2,0.5],[0.3,0.6]])
b2=np.array([0.1,0.2])
a2=np.dot(z1,w2)+b2
z2=sigmoid(a2)

w3=np.array([[0.1,0.3],[0.2,0.4]])
b3=np.array([0.1,0.2])
a3=np.dot(z2,w3)+b3
print(a3)

输出: [0.31682708 0.69627909]

8.Softmax函数

在这里插入图片描述

import numpy as np
def softmax(a):
    exp_a=np.exp(a)
    sum_exp_a=np.sum(exp_a)
    y=exp_a/sum_exp_a
    return y

a=np.array([0.3,2.9,4.0])
print(softmax(a))

加入常数c防止溢出:

import numpy as np
def softmax(a):
    c=np.max(a)
    exp_a=np.exp(a-c)
    sum_exp_a=np.sum(exp_a)
    y=exp_a/sum_exp_a
    return y
a=np.array([0.3,2.9,4.0])
y=softmax(a)
print(y)
print(np.sum(y))

softmax函数的输出是0.0到1.0之间的实数。并且,softmax函数的输出值的总和是1。输出总和为1是softmax函数的一个重要性质。

### 不同激活函数的特点和应用场景 #### Sigmoid 函数特点及应用场合 Sigmoid 函数定义域为实数集,值域位于 (0, 1),具有平滑渐近线特性。然而,在神经网络训练过程中容易遇到饱和区间的梯度消失问题,即当输入过大或过小时,导数值趋近于零,阻碍误差逆向传递效率。尽管如此,对于二分类任务而言,Sigmoid 可作为输出层的理想选择之一[^1]。 #### Tanh 函数特点及应用场合 Tanh 函数同样适用于隐藏层节点,相较于 Sigmoid 而言,前者能够提供更加紧凑的数据映射范围 [-1, 1] 并且关于原点对称。这种性质使得模型参数初始化阶段更容易获得较小的标准差分布,从而加速收敛过程并提高泛化能力。不过需要注意的是,Tanh 同样存在类似于 Sigmoid 的梯度弥散现象[^3]。 #### ReLU 函数特点及应用场合 ReLU(Rectified Linear Unit)是一种简单有效的非线性变换方法,它只保留正半轴上的数据而将负半部分置零处理。相比于前两者,ReLU 显著减少了计算复杂度并且有效缓解了深层架构下的梯度消退难题;另外值得注意的地方在于,如果输入持续保持为负,则对应权重可能永远无法得到更新机会,形成所谓“死亡神经元”。因此实践中常采用 Leaky ReLU 或 Parametric ReLU 来改进这一缺陷[^2]。 #### Softmax 函数特点及应用场合 Softmax 函数主要用于解决多类别分类场景下概率估计需求。通过指数运算放大差异项之后再做标准化操作,最终得到一组满足加权求和等于一的概率型预测结果。此机制不仅赋予各个候选标签合理的置信水平评估依据,而且确保了整个系统的稳定性和鲁棒性。特别是在面对大规模离散空间探索时表现出色,成为现代深度学习框架不可或缺的重要组成部分。 ```python import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return np.tanh(x) def relu(x): return np.maximum(0, x) def softmax(x): exp_x = np.exp(x - np.max(x)) return exp_x / exp_x.sum(axis=0) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值