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、
9533

被折叠的 条评论
为什么被折叠?



