深度学习 | 激活函数公式及代码

阶跃函数:

import numpy as np
import matplotlib.pylab as plt
def step_function(x):
 return np.array(x > 0, dtype=np.int)#x>0返回布尔数组,dtypy转换为整型
x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()

 

 

sigmoid函数

(也称s函数、s型逻辑函数)

#一
scipy.special.expit()

#二
def sigmoid(x):
 return 1 / (1 + np.exp(-x))
x = np.array([-1.0, 1.0, 2.0])
sigmoid(x)
#绘制s
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函数:

scipy.special.logit()

ReLU函数

ReLU(Rectified Linear Unit)输入大于0时,直接输出该值;在输入小于等于0时,输出0

def relu(x):
 return np.maximum(0, x)

 

 

<think>好的,我现在需要帮助用户找到用MATLAB实现常见深度学习激活函数的方法,比如ReLU和Sigmoid。首先,我需要回忆一下这些激活函数的数学表达式,然后思考如何在MATLAB中编写对应的代码。 用户提到的激活函数包括ReLU和Sigmoid,可能还有其他的,比如Tanh。我需要确保每个函数的实现正确,并且符合MATLAB的语法。根据用户提供的引用内容,用户可能已经看过一些示例,但需要更详细的解释和代码。 首先,Sigmoid函数的数学表达式是$\sigma(x) = \frac{1}{1 + e^{-x}}$。在MATLAB中,可以直接用数组运算来实现。例如,对于输入向量x,计算sigmoid可以用1./(1 + exp(-x))。需要注意的是,点运算符(.)的使用,确保对每个元素进行操作。 接下来是ReLU函数,它的定义是$f(x) = \max(0, x)$。在MATLAB中,可以用max(x, 0)来实现。同样,这里需要处理的是向量或矩阵的元素级别操作,所以max函数会自动处理每个元素。 然后是Tanh函数,数学表达式为$\tanh(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}}$。在MATLAB中,可以直接使用内置的tanh函数,但用户可能需要显式地编写代码,所以可能需要用(exp(x) - exp(-x))./(exp(x) + exp(-x)),或者直接调用tanh(x)。 另外,用户提供的引用中提到了Leaky ReLU和Softmax。Leaky ReLU的公式是$f(x) = \begin{cases} x & \text{if } x \geq 0 \\ \alpha x & \text{otherwise} \end{cases}$,其中α是一个小的正数,比如0.01。在MATLAB中可以用x.*(x>=0) + alpha*x.*(x<0)来实现。 Softmax函数用于多分类,公式为$\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}$。需要注意数值稳定性问题,通常会对输入进行减去最大值的处理,防止指数爆炸。MATLAB中可以这样实现:exp(x) ./ sum(exp(x), 'all'),但可能需要调整维度,根据输入是向量还是矩阵。 接下来,我需要检查用户提供的引用内容,看看是否有代码示例或者需要注意的地方。引用1中的MATLAB代码已经展示了Sigmoid和ReLU的绘制,但用户可能需要更通用的函数实现,而不仅仅是绘图。引用2提到了Tanh的梯度消失问题,但可能不需要在代码中体现。引用3是Python的示例,但用户需要的是MATLAB,所以需要转换语法。 现在需要将这些函数封装成MATLAB函数,可能每个激活函数单独一个函数文件,或者在脚本中定义。例如,可以创建sigmoid.m、relu.m等文件,每个文件中定义对应的函数。 还需要考虑输入的处理,确保函数能够处理向量、矩阵,甚至高维数组。MATLAB的矩阵运算在这方面比较方便,但需要注意维度问题,尤其是在Softmax中可能需要指定沿着哪个维度求和。 另外,可能需要演示如何调用这些函数,比如生成输入x,计算对应的激活函数值,并绘制图像,如用户提供的引用中的示例。这样用户可以直观地看到激活函数的形状。 最后,需要确保代码的效率和正确性,例如避免循环,使用向量化操作,这对于MATLAB来说非常重要,可以提升性能。 总结步骤: 1. 为每个激活函数编写MATLAB函数代码。 2. 提供示例输入,展示如何调用这些函数。 3. 绘制图形,帮助用户可视化激活函数。 4. 考虑可能的错误处理,例如输入是否为空,但用户可能不需要太复杂的错误检查,因为是基础实现。 5. 引用用户提供的参考文献中的相关内容,指出代码的来源或参考,如引用1中的绘图方法。 可能的疑问点:是否需要处理梯度计算?用户的问题中可能没有提到,但引用2提到了梯度消失的问题,不过用户主要关注的是实现代码,所以可能不需要包含导数部分,除非用户特别要求。 现在开始组织代码,每个函数单独说明,并给出示例。例如: 对于Sigmoid函数: function y = sigmoid(x) y = 1./(1 + exp(-x)); end 对于ReLU: function y = relu(x) y = max(x, 0); end 对于Leaky ReLU,可能需要参数alpha,可以设置默认值: function y = leaky_relu(x, alpha) if nargin < 2 alpha = 0.01; end y = x.*(x >= 0) + alpha.*x.*(x < 0); end Softmax函数需要注意维度,假设输入是向量: function y = softmax(x) e_x = exp(x - max(x)); % 防止数值溢出 y = e_x / sum(e_x); end 或者处理矩阵,沿着特定维度,比如沿着列: function y = softmax(x) e_x = exp(x - max(x, [], 1)); % 按列减去最大值 y = e_x ./ sum(e_x, 1); % 按列求和 end 需要根据应用场景调整。 然后,演示如何使用这些函数,例如: x = linspace(-5,5); sigmoid_x = sigmoid(x); plot(x, sigmoid_x); 同样对于其他函数。用户提供的引用1中的代码已经做了类似的事情,可以引用作为示例。 最后,生成相关问题,可能需要包括梯度计算、比较不同激活函数的特点、如何在深度学习框架中使用这些激活函数等。</think>以下是在MATLAB中实现常见深度学习激活函数的详细说明,包含代码示例和可视化方法: ### 一、Sigmoid函数 数学表达式: $$\sigma(x) = \frac{1}{1 + e^{-x}}$$ MATLAB实现: ```matlab function y = sigmoid(x) y = 1./(1 + exp(-x)); % 点运算保证向量/矩阵输入兼容性 end ``` 可视化示例: ```matlab x = linspace(-5,5); % 生成-5到5的线性间隔向量 plot(x, sigmoid(x), 'r--'); legend('Sigmoid'); ``` 特点:输出范围(0,1),适用于二分类问题[^2] ### 二、ReLU函数 数学表达式: $$f(x) = \max(0,x)$$ MATLAB实现: ```matlab function y = relu(x) y = max(x, 0); % 内置函数自动处理数组 end ``` 可视化示例: ```matlab x = -10:0.1:10; plot(x, relu(x), 'b'); legend('ReLU'); ``` 特点:计算高效,缓解梯度消失[^1] ### 三、Leaky ReLU 数学表达式: $$f(x) = \begin{cases} x & x \geq 0 \\ \alpha x & x < 0 \end{cases}$$ MATLAB实现: ```matlab function y = leaky_relu(x, alpha) if nargin < 2 alpha = 0.01; % 默认泄露系数 end y = x.*(x >= 0) + alpha*x.*(x < 0); end ``` ### 四、Tanh函数 数学表达式: $$\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$$ MATLAB实现(可直接调用内置函数): ```matlab function y = tanh_act(x) y = tanh(x); % 等价于(exp(x)-exp(-x))./(exp(x)+exp(-x)) end ``` 特点:输出范围(-1,1),中心对称特性有利于梯度更新 ### 五、Softmax函数 数学表达式: $$\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j=1}^n e^{x_j}}$$ MATLAB实现(带数值稳定处理): ```matlab function y = softmax(x) x = x - max(x); % 防止数值溢出 ex = exp(x); y = ex ./ sum(ex); end ``` ### 可视化对比示例 ```matlab x = linspace(-5,5,200); subplot(2,2,1) plot(x,sigmoid(x)); title('Sigmoid') subplot(2,2,2) plot(x,relu(x)); title('ReLU') subplot(2,2,3) plot(x,leaky_relu(x)); title('Leaky ReLU') subplot(2,2,4) plot(x,tanh_act(x)); title('Tanh') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值