专栏名称: 学姐带你玩AI
这里有人工智能前沿信息、算法技术交流、机器学习/深度学习经验分享、AI大赛解析、大厂大咖算法面试分享、人工智能论文技巧、AI环境工具库教程等……学姐带你玩转AI!
目录
相关文章推荐
壹心理  ·  活得通透的人,都有一个共性:不讨好 ·  14 小时前  
元素和同位素地球化学  ·  《人类简史》人性的底层逻辑及其与文明发展的悖论 ·  16 小时前  
元素和同位素地球化学  ·  《人类简史》人性的底层逻辑及其与文明发展的悖论 ·  16 小时前  
简单心理  ·  DeepSeek好像在塑造一种新型依恋关系 ·  3 天前  
51好读  ›  专栏  ›  学姐带你玩AI

24 个超强 PyTorch 操作!!

学姐带你玩AI  · 公众号  ·  · 2025-01-15 18:36

正文

来源:投稿  作者:Fairy
编辑:学姐

PyTorch,作为一款开源的机器学习库,以其灵活性和易用性在深度学习领域迅速崛起。无论你是初学者还是经验丰富的开发者,掌握PyTorch的常用操作都是提升深度学习技能的关键。本文将详细介绍PyTorch的24个常用操作,帮助你更好地理解和应用这一强大的工具。

一、基础张量操作

  1. 创建张量
import torch

# 从Python列表创建张量
tensor_from_list = torch.tensor([1234])
print(tensor_from_list)

# 创建全零张量
zeros_tensor = torch.zeros(23)
print(zeros_tensor)

# 创建全一张量
ones_tensor = torch.ones(23)
print(ones_tensor)

# 创建随机张量
rand_tensor = torch.rand(23)
print(rand_tensor)
  1. 张量形状变换
# 改变张量的形状
reshaped_tensor = rand_tensor.reshape(32)
print(reshaped_tensor)

# 增加一个新的维度
unsqueeze_tensor = rand_tensor.unsqueeze(0)
print(unsqueeze_tensor.shape)

# 压缩维度
flatten_tensor = rand_tensor.flatten()
print(flatten_tensor)
  1. 张量拼接与堆叠
# 沿指定维度拼接张量
tensor1 = torch.tensor([[12], [34]])
tensor2 = torch.tensor([[56], [78]])
concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)
print(concatenated_tensor)

# 在新的维度上堆叠张量
stacked_tensor = torch.stack((tensor1, tensor2), dim=0)
print(stacked_tensor)
  1. 张量索引与切片
# 根据索引获取张量中的元素
element = tensor1[01]
print(element)

# 切片操作
sliced_tensor = tensor1[:, 1:]
print(sliced_tensor)
  1. 数学运算
# 张量相加
sum_tensor = tensor1 + tensor2
print(sum_tensor)

# 张量相乘
prod_tensor = tensor1 * tensor2
print(prod_tensor)

# 计算张量的和、均值、最大值、最小值
tensor_sum = torch.sum(tensor1)
tensor_mean = torch.mean(tensor1)
tensor_max = torch.max(tensor1)
tensor_min = torch.min(tensor1)
print(tensor_sum, tensor_mean, tensor_max, tensor_min)

二、高级张量操作

  1. 张量转置
# 交换张量的维度
transposed_tensor = tensor1.transpose(01)
print(transposed_tensor)
  1. 张量扩展
# 在张量中插入新的维度
expanded_tensor = tensor1.unsqueeze(1)
print(expanded_tensor.shape)
  1. 张量选择
# 按指定维度和索引选择数据
selected_tensor = torch.index_select(tensor1, dim=0, index=torch.tensor([01]))
print(selected_tensor)
  1. 布尔索引
# 根据布尔掩码选择元素
mask = tensor1 > 2
masked_tensor = torch.masked_select(tensor1, mask)
print(masked_tensor)
  1. 张量分割
# 按大小或张量数量分割张量
split_tensors = torch.split(tensor1, split_size_or_sections=2, dim=0)
for tensor in split_tensors:
    print(tensor)
  1. 张量块分割
# 将张量分割成特定数量的块
chunked_tensors = torch.chunk(tensor1, chunks=2, dim=0)
for tensor in chunked_tensors:
    print(tensor)
  1. 张量顶部元素
# 返回张量中最大的k个元素
topk_tensor, topk_indices = torch.topk(tensor1, k=2, dim=1, largest=True, sorted=True)
print(topk_tensor, topk_indices)

三、神经网络组件

  1. 全连接层
import torch.nn as nn

# 创建一个全连接层
input_size = 10
output_size = 5
linear_layer = nn.Linear(input_size, output_size)
print(linear_layer)
  1. 卷积层
# 创建一个2D卷积层
conv_layer = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
print(conv_layer)
  1. 激活函数
# ReLU激活函数
relu_layer = nn.ReLU()
output = relu_layer(torch.tensor([-1.00.01.02.0]))
print(output)

# Sigmoid激活函数
sigmoid_layer = nn.Sigmoid()
output = sigmoid_layer(torch.tensor([-1.00.01.0]))
print(output)
  1. 损失函数
# 交叉熵损失函数
criterion = nn.CrossEntropyLoss()
input = torch.randn(35, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
loss = criterion(input, target)
print(loss)
  1. 优化器
# Adam优化器
optimizer = torch.optim.Adam(params=linear_layer.parameters(), lr=0.001)
print(optimizer)

四、数据处理与加载

  1. 数据转换
from torchvision import transforms

# 改变图像大小
resize_transform = transforms.Resize((128128))

# 标准化图像数据
normalize_transform = transforms.Normalize(mean=[0.4850.4560.406], std=[0.2290.2240.225])
  1. 加载数据集
from torchvision.datasets import CIFAR10

# 加载CIFAR-10数据集
dataset = CIFAR10(root='./data', train=True, download=True, transform=transforms.Compose([resize_transform, normalize_transform]))
print(dataset)
  1. 数据加载器
from torch.utils.data import DataLoader

# 创建数据加载器
dataloader = DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2)
for images, labels in dataloader:
    print(images.shape, labels.shape)
    break

五、模型训练与评估

  1. 前向传播
# 使用线性层进行前向传播
input_data = torch.randn(1, input_size)
output_data = linear_layer(input_data)
print(output_data)
  1. 反向传播与梯度计算
# 计算损失
loss_fn = nn.MSELoss()
target = torch.randn(1, output_size)
loss = loss_fn(output_data, target)

# 反向传播计算梯度
optimizer.zero_grad()
loss.backward()

# 打印梯度
print(linear_layer.weight.grad)
  1. 模型参数更新
# 使用优化器更新模型参数
optimizer.step()
  1. 模型保存与加载






请到「今天看啥」查看全文