Pytorch常用函数

1.tensor张量

创建和扁平化很重要

python 复制代码
import torch
import numpy as np

ten1=torch.tensor([1,2,3])
ten2=torch.tensor(([4,5,6],[7,8,9]))
na=np.array(([1,2,3],[2,4,4]))
ten3=torch.from_numpy(na)
print(ten1)
print(ten2)
print(ten3)




# 创建一个示例张量
ten2 = torch.randn(3, 4, 5)
# 假设进行了一些不连续的操作
ten2 = ten2.transpose(1, 2)
print("转置后张量是否连续:", ten2.is_contiguous())

# 如果不连续,先转换为连续的
if not ten2.is_contiguous():
    ten2 = ten2.contiguous()

# 进行扁平化操作
ten2 = ten2.view(ten2.size(0), -1)
print("扁平化后张量形状:", ten2.shape)

2.PyTorch 数据处理与加载

1.加载数据集

对于图像数据集,torchvision.datasets 提供了许多常见数据集(如 CIFAR-10、ImageNet、MNIST 等)以及用于加载图像数据的工具。

python 复制代码
1.加载数据集

train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)

2.增强数据集 transform

你假设一下 一张图片可以随意旋转 角度是不是 另外一个数据了 transform就是这样

以图片为例

python 复制代码
data_transforms = {
    'train': 
        transforms.Compose([
        transforms.Resize([96, 96]),#调整为96x96
        transforms.RandomRotation(45),#随机旋转,-45到45度之间随机选
        transforms.CenterCrop(64),#从中心开始裁剪
        transforms.RandomHorizontalFlip(p=0.5),#随机水平翻转 选择一个概率概率
        transforms.RandomVerticalFlip(p=0.5),#随机垂直翻转
        transforms.ColorJitter(brightness=0.2, contrast=0.1, saturation=0.1, hue=0.1),#参数1为亮度,参数2为对比度,参数3为饱和度,参数4为色相
        transforms.RandomGrayscale(p=0.025),#概率转换成灰度率,3通道就是R=G=B
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])#均值,标准差
    ]),
    'valid': 
        transforms.Compose([
        transforms.Resize([64, 64]),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}

记得:transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225] 并非固定格式,不过它在处理基于 ImageNet 数据集训练的图像时被广泛使用.

[0.485, 0.456, 0.406] 是 ImageNet 数据集上图像三个通道(RGB)的均值,[0.229, 0.224, 0.225] 是对应的标准差。由于很多预训练的深度学习模型(如 ResNet、VGG 等)都是在 ImageNet 数据集上训练的,为了保证在使用这些预训练模型时输入数据的分布与训练时一致,在对新图像进行预处理时就会使用这组均值和标准差进行归一化。

3.进行分批

使用torch.utils.data.DataLoader

python 复制代码
batch_size = 128

image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x), data_transforms[x]) for x in ['train', 'valid']}
dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x], batch_size=batch_size, shuffle=True) for x in ['train', 'valid']}
dataset_sizes = {x: len(image_datasets[x]) for x in ['train', 'valid']}
class_names = image_datasets['train'].classes

1.datasets.ImageFolder:这是 PyTorch 中用于加载图像数据集的一个类。它假设数据集的目录结构是每个类别对应一个子文件夹,子文件夹的名称就是类别的名称,文件夹中包含该类别的所有图像。创建了一个

python 复制代码
image_datasets = {"train":  data_transforms[train],"valid":data_transforms[valid]}
dataLoader= {"train":  torch.utils.data.DataLoader[train],"valid":torch.utils.data.DataLoader[valid]}

2.torch.utils.data.dataloader.DataLoader

python 复制代码
{'train': torch.utils.data.dataloader.DataLoader ,
 'valid': torch.utils.data.dataloader.DataLoader }

3.class_names = image_datasets['train'].classes:文件名就是类别名

4.将类别名映射成真实字符串

python 复制代码
with open('cat_to_name.json', 'r') as f:
    cat_to_name = json.load(f)

3.torch.nn层和f函数

python 复制代码
1.torch.nn.Module 直接继承

2.torch.nn.Sequential(按顺序跑层数) 

3.torch.nn.Linear(in_features, out_features)//输出维度 类别

4 卷积层:
torch.nn.Conv2d(in_channels, out_channels, kernel_size)

torch.nn.Conv3d(in_channels, out_channels, kernel_size)

5.池化层
torch.nn.MaxPool2d(kernel_size)	

torch.nn.MaxPool3d(kernel_size)

6
torch.nn.ReLU()	ReLU 激活函数。
torch.nn.Sigmoid() sigmod

7
torch.nn.MSELoss()	均方误差损失。#回归问题
torch.nn.L1Loss()	L1 损失。
torch.nn.CrossEntropyLoss()	交叉熵损失。#分类问题
torch.nn.NLLLoss()	负对数似然损失。
torch.nn.BCELoss()	二分类交叉熵损失。
torch.nn.BCEWithLogitsLoss()	带 Sigmoid 的二分类交叉熵损失。
torch.nn.KLDivLoss()	KL 散度损失。
torch.nn.HingeEmbeddingLoss()	铰链嵌入损失。
torch.nn.MultiMarginLoss()	多分类间隔损失。
torch.nn.SmoothL1Loss()	平滑 L1 损失。

8

类/函数	描述
torch.nn.BatchNorm1d(num_features)	一维批归一化层。
torch.nn.BatchNorm2d(num_features)	二维批归一化层。
torch.nn.BatchNorm3d(num_features)	三维批归一化层。
torch.nn.LayerNorm(normalized_shape)	层归一化。
torch.nn.InstanceNorm1d(num_features)	一维实例归一化层。
torch.nn.InstanceNorm2d(num_features)	二维实例归一化层。
torch.nn.InstanceNorm3d(num_features)	三维实例归一化层。
相关推荐
元宇宙时间1 小时前
RWA加密金融高峰论坛&星链品牌全球发布 —— 稳定币与Web3的香港新篇章
人工智能·web3·区块链
MZ_ZXD0012 小时前
springboot汽车租赁服务管理系统-计算机毕业设计源码58196
java·c++·spring boot·python·django·flask·php
A 计算机毕业设计-小途3 小时前
大四零基础用Vue+ElementUI一周做完化妆品推荐系统?
java·大数据·hadoop·python·spark·毕业设计·毕设
天涯海风4 小时前
检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)
人工智能·缓存·语言模型
lxmyzzs5 小时前
基于深度学习CenterPoint的3D目标检测部署实战
人工智能·深度学习·目标检测·自动驾驶·ros·激光雷达·3d目标检测
跟着珅聪学java6 小时前
Apache OpenNLP简介
人工智能·知识图谱
AwhiteV6 小时前
利用图数据库高效解决 Text2sql 任务中表结构复杂时占用过多大模型上下文的问题
数据库·人工智能·自然语言处理·oracle·大模型·text2sql
念念01076 小时前
数学建模竞赛中评价类相关模型
python·数学建模·因子分析·topsis
Black_Rock_br6 小时前
AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
人工智能·macos
云天徽上7 小时前
【数据可视化-94】2025 亚洲杯总决赛数据可视化分析:澳大利亚队 vs 中国队
python·信息可视化·数据挖掘·数据分析·数据可视化·pyecharts