PyTorch基本用法(三)——激活函数

本文介绍了使用PyTorch实现的几种常见激活函数,包括ReLU、Sigmoid、Tanh及Softmax,并通过图表展示了这些函数的特性。

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

文章作者:Tyan
博客:noahsnail.com  |  优快云  |  简书

本文主要是关于PyTorch的激活函数。

import torch
import torch.nn.functional as func
from torch.autograd import Variable
import matplotlib.pyplot as plt

# 定义数据x
x = torch.linspace(-5, 5, 200)
x = Variable(x)
np_x = x.data.numpy()

# 通过激活函数处理x
y_relu = func.relu(x).data.numpy()
y_sigmoid = func.sigmoid(x).data.numpy()
y_tanh = func.tanh(x).data.numpy()
y_softmax = func.softplus(x).data.numpy()

# 绘制激活函数图
plt.figure(1, figsize = (8, 6))
plt.subplot(221)
plt.plot(np_x, y_relu, c = 'red', label = 'relu')
plt.ylim((-1, 5))
plt.legend(loc = 'best')

plt.figure(1, figsize = (8, 6))
plt.subplot(222)
plt.plot(np_x, y_sigmoid, c = 'red', label = 'sigmoid')
plt.ylim((0, 1))
plt.legend(loc = 'best')

plt.figure(1, figsize = (8, 6))
plt.subplot(223)
plt.plot(np_x, y_tanh, c = 'red', label = 'tanh')
plt.ylim((-1, 1))
plt.legend(loc = 'best')

plt.figure(1, figsize = (8, 6))
plt.subplot(224)
plt.plot(np_x, y_softmax, c = 'red', label = 'softmax')
plt.ylim((-1, 5))
plt.legend(loc = 'best')

plt.show()

运行结果:

Figure

参考资料

  1. https://www.youtube.com/user/MorvanZhou
### PyTorch 中 `nn` 模块的基本用法 PyTorch 的 `nn` 模块提供了构建神经网络所需的各种层和功能。以下是关于如何使用该模块的一些基本概念和示例。 #### 创建简单的全连接网络 通过继承 `torch.nn.Module` 类并定义前向传播方法 (`forward`) 来创建自定义模型。可以利用内置的层类(如线性变换、激活函数等)来快速搭建网络结构[^2]。 ```python import torch from torch import nn class SimpleNet(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleNet, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) # 定义第一个全连接层 self.relu = nn.ReLU() # 使用ReLU作为激活函数 self.fc2 = nn.Linear(hidden_size, output_size) # 输出层 def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out # 初始化参数 input_dim = 784 # 假设输入维度为MNIST图像展平后的大小 hidden_dim = 128 # 隐藏单元数 output_dim = 10 # 分类类别数量 model = SimpleNet(input_dim, hidden_dim, output_dim) print(model) ``` 上述代码展示了如何定义一个具有单隐藏层的多层感知机 (MLP),其中包含了两个主要部分:初始化阶段设置各层属性;以及实现数据流经这些组件的过程——即正向计算逻辑。 #### 批量归一化操作的应用实例 批量标准化是一种用于加速训练过程的技术,它能够减少内部协变量偏移现象的影响。下面是如何在一层之后加入批处理规范化步骤的例子: ```python batch_norm_layer = nn.BatchNorm1d(num_features=hidden_dim, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)[^1] class NetWithBatchNorm(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(NetWithBatchNorm, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.bn1 = batch_norm_layer # 添加BN层 self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, output_size) def forward(self, x): out = self.fc1(x) out = self.bn1(out) # 应用BN out = self.relu(out) out = self.fc2(out) return out bn_model = NetWithBatchNorm(input_dim, hidden_dim, output_dim) print(bn_model) ``` 这里引入了一个新的成员变量 `self.bn1` 表达式表示的是之前提到过的 Batch Normalization 层对象,并将其嵌入到整个流程当中去执行相应的运算[^1]。 #### 总结说明 以上介绍了两种典型的操作方式,在实际应用过程中可以根据具体需求灵活组合不同的构件以满足特定的任务目标。无论是基础架构还是高级特性,PyTorch 提供的强大工具箱都极大地简化了开发者的编程负担。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值