Pytorch整体框架学习

12.28 Learn Pytorch

一、神经网络


二、pytorch的整体框架

1.torch

(1).Tensor概念

张量 ,最基础的运算单位 ,一个多维矩阵,一个可以运行在gpu上的多维数据

(2).Tensor的创建
  1. torch.FloatTensor(2,3) / torch.FloatTensor([2,3,4,5])
  2. torch.randn(2,3) //2*3随机数
  3. torch.range(1,10,2) ——> tensor([1,3,5,7,9])
  4. torch.zeros/ones/empty ——>全为0/全为1/定义大小的空tensor
  5. 从NumPy数组创建
import numpy as np
numpy_array = np.array([1, 2, 3])
tensor_from_numpy = torch.from_numpy(numpy_array)
(3).Tensor的运算
  1. torch.abs/add/div/pow ——>绝对值/求和/求商/求幂
  2. torch.clamp(变量,上边界,下边界)
  3. torch.mm/mv ——>矩阵相乘/与矩阵*向量 //一维向量默认为列向量
  4. .T 转置矩阵

2.torch数据读取

(1).dataset类

自定义数据集

import torch
from torch.utils.data import Dataset# 自定义一个名称为MyDataset的数据集(继承pytorch内置的Dataset类)
class MyDataset(Dataset):# 重写构造函数(输入2个tensor类型的参数:数据/数据集合,数据对应的标签/集合)def __init__(self, data_tensor, target_tensor):self.data_tensor = data_tensor        self.target_tensor = target_tensor# 重写len方法:返回数据集大小def __len__(self):return self.data_tensor.size(0)  # 一般情况输进来的数据都是集合# 上重写getitem方法:基于索引,返回对应的数据及其标签,组合成1个元组返回def __getitem__(self, index):return self.data_tensor[index], self.target_tensor[index]

调用数据集

# 生成数据集和标签集 (数据元素长度=标签元素长度)
data_tensor = torch.randn(10, 3)        # 10行3列数据,可以理解为10个元素,每个元素个一维的3个元素列表
target_tensor = torch.randint(2, (10,)) # 标签是0或1的10个元素   # 对应语法:torch.randint(low, high, size)# 将数据封装成自定义数据集的Dataset
my_dataset = MyDataset(data_tensor, target_tensor)# 调用方法:查看数据集大小
print('Dataset size:', len(my_dataset))# 使用索引调用数据
print('tensor_data[0]: ', my_dataset[0])

(2).dataloader类
from torch.utils.data import DataLoader
tensor_dataloader = DataLoader(dataset=xxx,     # 传入的数据集, 必须参数,必须是Dataset 类型batch_size=x,    # int 类型,每个 batch 有多少个样本shuffle=x,       # bool 类型,在每个 epoch 开始的时候,是否对数据进行重新打乱;num_workers=x)   # int 类型,加载数据的进程数,0 意味着所有的数据都会被加载进主进程,默认为 0

3…torchvision

数据调用

Torchvision 库就是常用数据集 + 常见网络模型 + 常用图像处理方法
torchvision.datasets所支持的所有数据集,它都内置了相应的数据集接口

# 以MNIST为例
import torchvision
mnist_dataset = torchvision.datasets.MNIST(root='./data', //指定保存数据集位置train=True, //是否加载训练集数据transform=None, //图像预处理target_transform=None,//图像标签预处理download=True//True 自动下载)

torchvision.transforms

图像处理工具

数据类型变换
  • .ToTensor() ——>将 PIL.Image 或 Numpy.ndarray 数据转化为Tensor格式
  • .ToPILImage(mode=()) ——>将 Tensor 或 Numpy.ndarray 格式的数据转化为 PIL.Image ;mode=none :输入数据维度1/2/3/4 ——>数据类型/LA/RGB/RGBA
图像变换操作
  1. 对PIL.Image和 对Tensor都支持的变换操作
  • Resize
torchvision.transforms.Resize(size, interpolation=2)(PIL Image对象/tensor对象) //size 若是 int整数 较短边匹配到size另一边按比例缩放
  • .CenterCrop / .RandomCrop /.FiveCrop 中心剪裁 / 随机剪裁 / 从中心和四角剪裁
torchvision.transforms.CenterCrop(size)(PIL Image对象/tensor对象)
torchvision.transforms.RandomCrop(size, padding=None)(PIL Image对象/tensor对象)
torchvision.transforms.FiveCrop(size)(PIL Image对象/tensor对象)
  • RandomHorizontalFlip / RandomVerticalFlip 以某概率随机水平翻转图像和某概率随机垂直翻转图像
torchvision.transforms.RandomHorizontalFlip(p=0.5)(PIL Image对象/tensor对象)
  1. 仅针对Tensor的操作
  • 标准化
  1. 标准化是指每一个数据点减去所在通道的平均值,再除以所在通道的标准差
  2. 三维数据的前2维,可以说是长宽(面积大小),第三维习惯称之为通道
  3. 图像数据的通道指的是图像在不同颜色通道上的信息。在RGB图像中,通常有三个通道,分别代表红色(R)、绿色(G)和蓝色(B)。每个通道包含了图像在对应颜色上的信息,可以表示图像中不同颜色的亮度和色彩。在灰度图像中只有一个通道,代表了图像的亮度信息。
transforms.normalize(mean_vals, std_vals,inplace=False)
output = (input - mean) / std ;
mean:各通道的均值;
std:各通道的标准差;
inplace:是否原地操作

例:

from PIL import Image
from torchvision import transforms # 原图
orig_img = Image.open('TP02.jpg') 
display(orig_img)# 图像转化为Tensor
img_tensor = transforms.ToTensor()(orig_img)# 标准化# 定义标准化操作
# norm_oper = transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))  # RGB三通道,所以mean和std都是3个值
tensor_norm = transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))(img_tensor)# 再把标准化后的Tensor转化为图像
img_norm = transforms.ToPILImage()(tensor_norm)
display(img_norm)
多变换操作组合

compose 类

torchvision.transforms.Compose(transforms)

4.卷积神经网络 Torch.nn


4.torch.autograd

(1).相关概念
  • 在训练模型时,通常需要计算函数(通常是损失函数)相对于模型参数的导数或梯度。PyTorch中的autograd包提供了自动微分功能,它能够自动地追踪对张量的所有操作并进行微分。
  • 损失函数:损失函数的计算代表了模型预测值与真实标签之间的差异或者不一致程度。在训练模型时,我们希望模型的预测结果能够尽可能地接近真实标签,因此损失函数的计算可以帮助我们衡量模型预测的准确程度。
  • 模型参数的导数或梯度:“模型参数的导数”和“梯度”指的是损失函数相对于模型参数的变化率。在训练模型时,我们希望找到使损失函数最小化的模型参数值。为了实现这一目标,我们需要了解损失函数对模型参数的变化敏感程度,即损失函数对模型参数的导数或梯度。通过计算导数或梯度,我们可以知道在当前模型参数值下,沿着哪个方向对参数进行微小调整可以使损失函数减小,从而引导模型向更优的参数值迭代。
(2).基本使用
  • requires_grad=True 追踪计算历史

1、使用 .detach(): 创建一个内容相同但不需要梯度的新张量。

- x_detached = x.detach()

2、使用 torch.no_grad(): 在该上下文管理器中执行的所有操作都不会追踪梯度。

with torch.no_grad():y = x + 2
  • .backward() 计算所有requires_grad=True的张量的梯度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日力扣算法题(简单篇)

455.分发饼干 原题: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干…

编程新手IDE

身为一个前端开发者,我深知一个好的开发环境对于编程体验的重要性。对于新手来说,选择一个合适的IDE(集成开发环境)更是至关重要。一个好的IDE可以提高编程效率,减少错误,让新手更专注于学习编程本身。 今…

大创项目推荐 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 *…

模式识别与机器学习-集成学习

集成学习 集成学习思想过拟合与欠拟合判断方法 K折交叉验证BootstrapBagging随机森林的特点和工作原理: BoostingAdaBoost工作原理:AdaBoost的特点和优点:AdaBoost的缺点: Gradient Boosting工作原理:Gradient Boostin…

node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found

node: /lib64/libm.so.6: version GLIBC_2.27‘ not found 1.背景说明2.原因3.解决方法4.打包镜像5. 参考 1.背景说明 为了适配vue3 ,发布前端项目的jenkins分发镜像必须升级node 版本,如下镜像脚本 FROM kubesphere/builder-nodejs:v3.2.0 RUN npm ca…

android 13.0 Launcher3长按app弹窗设置为圆角背景功能实现一

1.前言 在13.0的系统ROM定制化开发中,在进行一些Launcher3的定制化开发中,在使用app的弹窗的功能时,会弹出应用信息和微件之类的内容,所以在定制需求中,需要默认设置为圆角背景,接下来就来分析下相关功能的实现 如图: 2.Launcher3长按app弹窗设置为圆角背景功能实现的核…

【MYSQL】-函数

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

AcWing 1076. 迷宫问题(最短路模型)

题目链接 活动 - AcWing本课程系统讲解常用算法与数据结构的应用方式与技巧。https://www.acwing.com/problem/content/description/1078/ 来源 《信息学奥赛一本通》, kuangbin专题 , POJ3984 代码 #include <cstring> #include <iostream> #include <alg…

Servlet的自动加载、ServletConfig对象、ServletContext对象

一、 Servlet的自动加载 默认情况下&#xff0c;第一次访问servlet的时候&#xff0c;创建servlet对象。如果servlet构造函数里面的代码或者init方法里面的代码比较多&#xff0c;就会导致用户第一次访问servlet的时候比较慢。这个时候&#xff0c;我们可以改变servlet对象的创…

【网络安全常用术语解读】SCAP详解

本文主要介绍什么是SCAP&#xff0c;SCAP的产生背景是怎样的&#xff0c;SCAP有什么用途&#xff0c;有哪些组件&#xff0c;各个组件的用途是什么&#xff1f; SCAP产生背景 由于计算机和网络技术的快速发展&#xff0c;越来越多的软件和系统被应用到企业和机构中&#xff0c…

迭代归并:归并排序非递归实现解析

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并排序的思想上我们已经全部介绍完了&#xff0c;但是同时也面临和快速排序一样的问题那就是递…

通信原理课设(gec6818) 007:语音识别

目录 1、去科大讯飞官网下载对应的sdk 2、科大讯飞文件夹的意思 3、配置ARM的录音环境 4、编程实现语音识别 我们的需求是将一个语音文件从客户端传到服务器&#xff0c;因此我们最好是选用tcp 现在市面上面常用的语音识别解决方案为&#xff1a;科大讯飞c和百度c 离…

龙芯3A5000上安装使用QQ

原文链接&#xff1a;龙芯3A5000上安装使用QQ hello&#xff0c;大家好啊&#xff01;今天我要给大家带来的是在龙芯3A5000处理器上安装使用QQ的文章。近期&#xff0c;腾讯发布了最新版本的QQ&#xff0c;值得一提的是&#xff0c;这一版本增加了对Linux系统下龙芯架构的支持。…

KG+LLM(一)KnowGPT: Black-Box Knowledge Injection for Large Language Models

论文链接&#xff1a;2023.12-https://arxiv.org/pdf/2312.06185.pdf 1.Background & Motivation 目前生成式的语言模型&#xff0c;如ChatGPT等在通用领域获得了巨大的成功&#xff0c;但在专业领域&#xff0c;由于缺乏相关事实性知识&#xff0c;LLM往往会产生不准确的…

项目记录:利用Redis实现缓存以提升查询效率

一、概述 当我们查询所有数据时&#xff0c;如果缓存中没有&#xff0c;则去数据库查询&#xff0c;如果有&#xff0c;直接查缓存的数据就行。注意定期更新缓存数据。 二、主体代码 private static final String ROOM_SCHEDULES_HASH "RoomSchedules";Overridepu…

pytorch 多卡训练 accelerate gloo

目录 accelerate 多卡训练 Windows例子 gloo 多卡训练 accelerate 多卡训练 Windows例子 import torch from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.data import DataLoader, RandomSampler from accelerate import Accelerator# 模拟数…

HTML---JavaScript基础

文章目录 目录 文章目录 本章目标 一.JavaScript基础 概述 特点 JavaScript 基本机构 语法 网页中引用JavaScript的方式 二. JavaScript核心语法 变量 ​编辑 数据类型 数组 练习 本章目标 掌握JavaScript的组成掌握JavaScript的基本语法会定义和使用函数会使用工具进行…

引领手游技术潮流:武汉灰京文化的卓越技术创新与市场推广支持

在数字娱乐领域&#xff0c;手游行业正蓬勃发展&#xff0c;为数以亿计的玩家提供了丰富的娱乐选择。武汉灰京文化&#xff0c;作为该领域的佼佼者&#xff0c;以其强大的技术创新和全面的市场推广支持&#xff0c;为合作伙伴的成功铺平了道路&#xff0c;不仅提升了游戏质量&a…

TV端Web页面性能优化实践

01 背景 随着互联网技术的持续创新和电视行业的高速发展&#xff0c;通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一&#xff0c;为广大用户提供了丰富的内容播放服务&#xff0c;除此之外&#xff0c;同样有会员运营、…

【Kubernetes】什么是 kubectl ?

什么是 kubectl &#xff1f; 1.什么是 kubectl &#xff1f;2.Kubernetes 内部结构3.Kubernetes API 的作用 1.什么是 kubectl &#xff1f; 在学习如何更有效地使用 kubectl 之前&#xff0c;您应该对它是什么以及它如何工作有一个基本的了解。从用户的角度来看&#xff0c;…