赞
踩
在深度学习中,PyTorch 是一个广泛使用的开源机器学习库。它提供了强大的功能,用于构建、训练和评估深度学习模型。本文档将详细介绍如何使用以下 PyTorch 相关库函数,并提供相应的案例示例:
torch
torch.nn.functional
torch.optim.lr_scheduler
torch
库import torch # 创建张量 x = torch.tensor([1.0, 2.0, 3.0]) y = torch.tensor([4.0, 5.0, 6.0]) # 张量加法 z = x + y print(z) # 输出: tensor([5., 7., 9.]) # 张量乘法 z = x * y print(z) # 输出: tensor([ 4., 10., 18.]) # 张量的加法和乘法的其他操作 z = torch.add(x, y) print(z) # 输出: tensor([5., 7., 9.]) z = torch.mul(x, y) print(z) # 输出: tensor([ 4., 10., 18.])
torch.nn.functional
(通常简写为torch.nn.f或简单地称为F)是PyTorch中一个非常重要的模块,它包含了构建神经网络所需的大部分激活函数、损失函数、归一化层等函数式接口。这些函数不保留任何内部状态,即它们是无状态的,每次调用时都会接收输入并返回输出,而不会保存任何关于之前输入或输出的信息。这使得torch.nn.functional
中的函数非常适合用于定义前向传播逻辑,同时也使得模型定义更加灵活和清晰。
import torch import torch.nn.functional as F # 创建张量 x = torch.tensor([-1.0, 0.0, 1.0]) # ReLU 激活函数 relu_x = F.relu(x) print(relu_x) # 输出: tensor([0., 0., 1.]) # Sigmoid 激活函数 sigmoid_x = torch.sigmoid(x) print(sigmoid_x) # 输出: tensor([0.2689, 0.5000, 0.7311]) # 计算均方误差损失 target = torch.tensor([0.0, 1.0, 1.0]) loss = F.mse_loss(sigmoid_x, target) print(loss) # 输出: tensor(0.2201)
import torch import torch.nn.functional as F # 假设我们有以下简单的模型参数(通常这些参数会由torch.nn.Module的子类管理) # 假设输入图像大小为1x28x28(1个通道,28x28像素) # 第一个全连接层将784(28*28)个输入转换为128个输出 weight1 = torch.randn(784, 128) bias1 = torch.zeros(128) # 第二个全连接层将128个输入转换为10个输出(对应10个类别) weight2 = torch.randn(128, 10) bias2 = torch.zeros(10) # 模拟一个批次的数据(假设批次大小为1,即一张图像) # 这里我们随机生成一个1x28x28的图像,并展平为1x784 x = torch.randn(1, 1, 28, 28) # [batch_size, channels, height, width] x = x.view(1, -1) # 展平为 [batch_size, 784] # 前向传播 # 第一层全连接 + ReLU激活 h1 = x.mm(weight1) + bias1 # [batch_size, 128] h1 = F.relu(h1) # 第二层全连接 output = h1.mm(weight2) + bias2 # [batch_size, 10] # 假设真实标签是3(即手写数字3) label = torch.tensor([3], dtype=torch.long) # 计算损失 loss = F.cross_entropy(output, label) print(f'Loss: {loss.item()}')
torch.nn.functional
中的函数通常与torch.nn模块中的层(Layer)相对应,但函数式接口更加灵活,适合用于快速原型设计或简单网络构建。torch.nn.functional
中的函数则用于定义前向传播逻辑和计算损失。在训练深度学习模型时,学习率的设置和调整对模型的训练效果和速度有着重要的影响。PyTorch 提供了多种学习率调度器,可以在训练过程中动态调整学习率。下面将详细解释如何使用 StepLR
和 MultiStepLR
学习率调度器,并演示它们的使用。
import torch from torch.optim import SGD from torch.optim.lr_scheduler import StepLR, MultiStepLR # 创建一个简单的模型 model = torch.nn.Linear(10, 1) # 创建优化器 optimizer = SGD(model.parameters(), lr=0.1) # 创建学习率调度器 scheduler_step = StepLR(optimizer, step_size=10, gamma=0.1) scheduler_multistep = MultiStepLR(optimizer, milestones=[30, 80], gamma=0.1) # 模拟训练过程 for epoch in range(100): optimizer.step() # 更新模型参数 scheduler_step.step() # 更新学习率 scheduler_multistep.step() # 更新学习率 print(f"Epoch {epoch}: StepLR LR={scheduler_step.get_last_lr()}, MultiStepLR LR={scheduler_multistep.get_last_lr()}")
本专栏致力于普及各种偏微分方程的不同数值求解方法,所有文章包含全部可运行代码。欢迎大家支持、关注!
作者 :计算小屋
个人主页 : 计算小屋的主页
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。