强化学习python零基础实战2——常用激活函数的可视化

1、main.py

(1)导入所需要的包

引入 Matplotlib 的 pyplot 模块,并用 plt 作为缩写,pyplot 常用于 绘图,math.e 是 自然常数 e。

import numpy as np
import math
import matplotlib.pyplot as plt
e = math.e

引入非线性,使得神经网络能够拟合复杂的函数关系:

(2)定义sigmoid函数

输出值在 (0,1),S 形曲线,输入小于 0 时接近 0,大于 0 时接近 1。常用于概率输出。

def sigmoid(x):
    return 1 / (1 + pow(e, -x))

(3)定义softplus函数

def softplus(x):
    return math.log(1 + pow(e, x))

(4)定义tanh函数

def tanh(x):
    return (e ** x - e ** (-x)) / (e ** x + e ** (-x))

(5)定义一个leakyrelu函数

负数区间有小斜率(0.1),正区间保持线性。常用于深层卷积神经网络(CNN)中,替代 ReLU。

正半轴是 45° 直线,负半轴是斜率较小的直线。

def leakyrelu(x):
    return max(x, 0.1 * x)

(6)定义一个mish函数

优点:平滑(连续可导),梯度传播更稳定。在多个任务中表现优于 ReLU、Swish。

缺点:计算复杂度比 ReLU 高(涉及 log、tanh)。

在负半轴不会像 ReLU 那样直接为 0,而是有小的负输出。在正半轴趋近于线性。

def mish(x):
    return x * tanh(softplus(x))

 

x = np.linspace(-5, 5, 1000)
y0 = np.linspace(-5, 5, 1000)
y1 = np.linspace(-5, 5, 1000)
y2 = np.linspace(-5, 5, 1000)
for i in range(1000):
    y0[i] = sigmoid(x[i])
    y1[i] = leakyrelu(x[i])
    y2[i] = mish(x[i])
plt.plot(x, y0, color='blue', linewidth=1, label='sigmoid')
plt.plot(x, y1, color='red', linewidth=1, label='leakyrelu')
plt.plot(x, y2, color='orange', linewidth=1, label='mish')
plt.title('sigmoid, leakyrelu and Mish functions', fontdict={'family': 'Times New Roman', 'size': 14})
plt.xticks(fontproperties = 'Times New Roman', size = 14)
plt.legend(prop={'family' : 'SimSun', 'size' : 14})
plt.yticks(fontproperties = 'Times New Roman', size = 14)
plt.grid()
plt.savefig('mish.jpg', dpi=600, bbox_inches='tight')
plt.show()

运行结果:

2、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值