深度学习 – 初步认识Torch

文章目录

  • 深度学习 -- 初步认识Torch
  • 一,认识人工智能
    • 1.1 人工智能的本质
    • 1.2 人工智能的实现过程
  • 二,认识Torch
    • 2.1简介
    • 2.2 概述
    • 2.3 Tensor的创建
      • 2.3.1 torch.tensor
      • 2.3.2 torch.Tensor
  • 三,创建线性和随机张量
    • 3.1创建线性张量
    • 3.2 随机张量
      • 3.2.1 随机数种子
      • 3.2.2 随机张量
  • 四,Tensor常见属性
    • 4.1常见属性
    • 4.2 切换设备
    • 4.3类型转换


一,认识人工智能

1.1 人工智能的本质

  1. 本质是数学计算
  2. 数学是理论关键
  3. 计算机是实现关键:算力
  4. 新的有效算法,需要更大的算力

​ NLP(说话,听)、CV(眼睛)、自动驾驶、机器人(肢体动作)、大模型

1.2 人工智能的实现过程

三要素:数据、网络、算力

① 神经网络:找到合适的数学公式;

② 训练:用已有数据训练网络,目标是求最优解;

③ 推理:用模型预测新样本;

二,认识Torch

2.1简介

PyTorch是一个基于Python的深度学习框架,它提供了一种灵活、高效、易于学习的方式来实现深度学习模型。PyTorch最初由Facebook开发,被广泛应用于计算机视觉、自然语言处理、语音识别等领域。

​ PyTorch使用张量(tensor)来表示数据,可以轻松地处理大规模数据集,且可以在GPU上加速。

​ PyTorch提供了许多高级功能,如**自动微分(automatic differentiation)、自动求导(automatic gradients)**等,这些功能可以帮助我们更好地理解模型的训练过程,并提高模型训练效率。

2.2 概述

PyTorch会将数据封装成张量(Tensor)进行计算,所谓张量就是元素为相同类型的多维矩阵。

张量可以在 GPU 上加速运行。

  • 张量是一个多维数组,通俗来说可以看作是扩展了标量、向量、矩阵的更高维度的数组。张量的维度决定了它的形状(Shape),例如:

    • 标量 是 0 维张量,如 a = torch.tensor(5)

    • 向量 是 1 维张量,如 b = torch.tensor([1, 2, 3])

    • 矩阵 是 2 维张量,如 c = torch.tensor([[1, 2], [3, 4]])

    • 更高维度的张量,如3维、4维等,通常用于表示图像、视频数据等复杂结构。

    • 动态计算图:PyTorch 支持动态计算图,这意味着在每一次前向传播时,计算图是即时创建的。

    • GPU 支持:PyTorch 张量可以通过 .to('cuda') 移动到 GPU 上进行加速计算。

    • 自动微分:通过 autograd 模块,PyTorch 可以自动计算张量运算的梯度,这对深度学习中的反向传播算法非常重要。

    • PyTorch中有3种数据类型:浮点数、整数、布尔。其中,浮点数和整数又分为8位、16位、32位、64位,加起来共9种。原因是:场景不同,对数据的精度和速度要求不同。通常,移动或嵌入式设备追求速度,对精度要求相对低一些。精度越高,往往效果也越好,自然硬件开销就比较高。

2.3 Tensor的创建

2.3.1 torch.tensor

根据指定的数据创建张量

import torch#使用tensor创建张量
def text1():t1=torch.tensor([1,2,3],dtype=torch.float32,device='cuda')print(t1)print(t1.shape)print(t1.size())#和shapS作用一样print(t1.dtype)if __name__ == '__main__':text1()
tensor([1., 2., 3.], device='cuda:0')
torch.Size([3])
torch.Size([3])
torch.float32

2.3.2 torch.Tensor

根据形状创建张量,其也可用来创建指定数据的张量

#使用Tensor构造函数,构建张量
#强制将数据类型装换位float32
def text2():t1=torch.Tensor([1,2,3])print(t1)print(t1.size())print(t1.dtype)if __name__ == '__main__':# text1()text2()
python
tensor([1., 2., 3.])
torch.Size([3])
torch.float32

torch.Tensor与torch.tensor区别

特性torch.Tensor()torch.tensor()
数据类型推断强制转为 torch.float32根据输入数据自动推断(如整数→int64
显式指定 dtype不支持支持(如 dtype=torch.float64
设备指定不支持支持(如 device='cuda'
输入为张量时的行为创建新副本(不继承原属性)默认共享数据(除非 copy=True
推荐使用场景需要快速创建浮点张量需要精确控制数据类型或设备

三,创建线性和随机张量

3.1创建线性张量

import torch
import numpy as np
# 设置打印精度
torch.set_printoptions(sci_mode=False)def test01():#创建线性张量r1=torch.arange(1,10,2)print(r1)#在指定空间按照元素个数生成张量r2=torch.linspace(1,10,10)#创建一个从一到十的线性张量print(r2)r3=torch.linspace(3,10000,10)#创建一个从3到10000的线性张量print(r3)if __name__ == '__main__':test01()
tensor([1, 3, 5, 7, 9])
tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([    3.0000,  1113.7778,  2224.5557,  3335.3335,  4446.1113,  5556.8887,6667.6665,  7778.4443,  8889.2227, 10000.0000])

3.2 随机张量

使用torch.randn 创建随机张量

3.2.1 随机数种子

随机数种子(Random Seed)是一个用于初始化随机数生成器的数值。随机数生成器是一种算法,用于生成一个看似随机的数列,但如果使用相同的种子进行初始化,生成器将产生相同的数列。

import torchdef test01():torch.manual_seed(1)print(torch.initial_seed())
1

3.2.2 随机张量

在 PyTorch 中,种子影响所有与随机性相关的操作,包括张量的随机初始化、数据的随机打乱、模型的参数初始化等。通过设置随机数种子,可以做到模型训练和实验结果在不同的运行中进行复现。

def test02():#首先设置随机数种子torch.manual_seed(225)#生成一个5*5的矩阵,1到3的随机数x = torch.randint(1, 6, (5, 5))print(x)#randn 生成正太分布的随机数Ss1=torch.randn(2,3)print(s1)
tensor([[5, 1, 5, 3, 3],[2, 5, 4, 3, 2],[1, 4, 3, 2, 3],[1, 2, 5, 3, 4],[4, 1, 5, 5, 2]])
tensor([[ 0.5403,  1.1903,  0.5832],[ 1.5792,  1.5763, -0.6938]])

四,Tensor常见属性

张量有device、dtype、shape等常见属性

4.1常见属性

import torchdef test01():x = torch.tensor([1, 2, 3])print(x.dtype)# torch.int64print(x.device)# cpuprint(x.requires_grad)# Falseprint(x.shape)# torch.Size([3]),表示一维向量,长度为3print(x.size())# torch.Size([3]),表示一维向量,长度为3print(x.ndimension())# 1,张量维度print(x.numel())# 3,元素总数print(x.dim())# 1,张量维度数if __name__ == '__main__':test01()
torch.int64
cpu
False
torch.Size([3])
torch.Size([3])
1
3
1

4.2 切换设备

import torchdef test01():#在创建当量时制定devicex = torch.randint(1, 3, (5, 5), device='cuda')print(x)#使用to方法将数据移动到GPU#转换后要重新赋值y=torch.tensor([1,2,3])y = y.to('cuda')print(y.device)#使用cuda()或cpu()方法  z=torch.tensor([1,2,3],device='cuda')z=z.cpu()print(z.device)if __name__ == '__main__':test01()
tensor([[2, 2, 1, 2, 2],[1, 2, 1, 2, 1],[1, 1, 2, 1, 1],[1, 2, 1, 2, 2],[2, 2, 2, 1, 2]], device='cuda:0')
cuda:0
cpu

4.3类型转换

import torchdef test01():#在创建当量时制定devicex = torch.randint(1, 3, (5, 5), device='cuda')print(x)#使用to方法将数据移动到GPU#转换后要重新赋值y=torch.tensor([1,2,3])y = y.to('cuda')print(y.device)#使用cuda()或cpu()方法  z=torch.tensor([1,2,3],device='cuda')z=z.cpu()print(z.device)def test02():data = torch.tensor([1,2,3])#创建张量print(data.dtype)#使用type()方法转换数据类型data = data.type(torch.float32)print(data.dtype)data = data.type(torch.int32)print(data.dtype)#使用类型方法data = data.float()#转换为float32print(data.dtype)data = data.int()#转换为int32print(data.dtype)data = data.long()#转换为int64print(data.dtype)data = data.short()#转换为int16print(data.dtype)#使用dtype属性data = torch.tensor([1,2,3],dtype=torch.float32)#转换为float32print(data.dtype)if __name__ == '__main__':# test01()test02()
torch.int64
torch.float32
torch.int32
torch.float32
torch.int32
torch.int64
torch.int16
torch.float32

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

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

相关文章

BGP的“聪明选路”遇上了TCP的“路径洁癖”,需人工调和

在路由器R1上有两条外网,WAN1和WAN2。R1上做了域名分流功能,全局网址分到WAN1,指定域名分到WAN2(优先级更高)。症状是用户反馈部分网页无法打开。于是各种检查尝试...... 2天过去了......最终结论是:即使S…

ACWing算法笔记 | 二分

🔍 C 二分查找双模板详解:左闭右开 vs 左闭右闭(二分笔记)二分查找(Binary Search)是一类高效的搜索算法,在 O(log n) 的时间复杂度下查找答案,适用于单调性问题。C STL 的 lower_bo…

centos 新加磁盘分区动态扩容

你不能直接将一个分区分配给/dev/mapper/centos-root,因为这是一个逻辑卷(属于 LVM 系统)。不过,你可以通过以下步骤将/dev/sda3添加到现有卷组或创建新的逻辑卷: 确认磁盘和分区信息 首先检查分区是否已格式化以及是否…

python学智能算法(二十六)|SVM-拉格朗日函数构造

【1】引言 前序学习进程中,已经了解了拉格朗日乘数法求极值的基本原理,也了解了寻找最佳超平面就是寻找最佳分隔距离。 这篇文章的学习目标是:使用拉格朗日乘数法获取最佳的分隔距离。 【2】构造拉格朗日函数 目标函数 首先是目标函数f&a…

智能制造——48页毕马威:汽车营销与研发数字化研究【附全文阅读】

涵盖了汽车行业数字化转型、汽车营销业务能力建设(以会员管理为例)以及汽车研发与创新能力建设等议题。毕马威认为,软件定义汽车已成为汽车行业中的核心议题,并围绕此议题提供了相关方案。在市场观点方面,毕马威与多家…

嵌入式学习-PyTorch(8)-day24

torch.optim 优化器torch.optim 是 PyTorch 中用于优化神经网络参数的模块,里面实现了一系列常用的优化算法,比如 SGD、Adam、RMSprop 等,主要负责根据梯度更新模型的参数。🏗️ 核心组成1. 常用优化器优化器作用典型参数torch.op…

PostgreSQL实战:高效SQL技巧

PostgreSQL PG 在不同领域可能有不同的含义,以下是几种常见的解释: PostgreSQL PostgreSQL(简称 PG)是一种开源的关系型数据库管理系统(RDBMS),支持 SQL 标准并提供了丰富的扩展功能。它广泛应用于企业级应用、Web 服务和数据分析等领域。 PostgreSQL 的详细介绍 Po…

3-大语言模型—理论基础:生成式预训练语言模型GPT(代码“活起来”)

目录 1、GPT的模型结构如图所示 2、介绍GPT自监督预训练、有监督下游任务微调及预训练语言模型 2.1、GPT 自监督预训练 2.1.1、 输入编码:词向量与位置向量的融合 2.1.1.1、 输入序列与词表映射 2.1.1.2、 词向量矩阵与查表操作 3. 位置向量矩阵 4. 词向量与…

【Redis 】看门狗:分布式锁的自动续期

在分布式系统的开发中,保证数据的一致性和避免并发冲突是至关重要的任务。Redis 作为一种广泛使用的内存数据库,提供了实现分布式锁的有效手段。然而,传统的 Redis 分布式锁在设置了过期时间后,如果任务执行时间超过了锁的有效期&…

MYSQL--快照读和当前读及并发 UPDATE 的锁阻塞

快照读和当前读在 MySQL 中,数据读取方式主要分为 快照读 和 当前读,二者的核心区别在于是否依赖 MVCC(多版本并发控制)的历史版本、是否加锁,以及读取的数据版本是否为最新。以下是详细说明:一、快照读&am…

css样式中的选择器和盒子模型

目录 一、行内样式二、内部样式三、外部样式四、结合选择器五、属性选择器六、包含选择器七、子选择器八、兄弟选择器九、选择器组合十、伪元素选择器十一、伪类选择器十二、盒子模型 相关文章 学习标签、属性、选择器和外部加样式积累CSS样式属性:padding、marg…

关于基于lvgl库做的注册登录功能的代码步骤:

以下是完整的文件拆分和代码存放说明,按功能模块化划分,方便工程管理:一、需要创建的文件清单 文件名 作用 类型 main.c 程序入口,初始化硬件和LVGL 源文件 ui.h 声明界面相关函数 头文件 ui.c 实现登录、注册、主页面的UI 源文…

RAII机制以及在ROS的NodeHandler中的实现

好的,这是一个非常核心且优秀的设计问题。我们来分两步详细解析:先彻底搞懂什么是 RAII,然后再看 ros::NodeHandle 是如何巧妙地运用这一机制的。1. 什么是 RAII 机制? RAII 是 “Resource Acquisition Is Initialization” 的缩写…

Linux LVS集群技术

LVS集群概述1、集群概念1.1、介绍集群是指多台服务器集中在一起,实现同一业务,可以视为一台计算机。多台服务器组成的一组计算机,作为一个整体存在,向用户提供一组网络资源,这些单个的服务器就是集群的节点。特点&…

spring-ai-alibaba如何上传文件并解析

问题引出 在我们日常使用大模型时,有一类典型的应用场景,就是将文件发送给大模型,然后由大模型进行解析,提炼总结等,这一类功能在官方app中较为常见,但是在很多模型的api中都不支持,那如何使用…

「双容器嵌套布局法」:打造清晰层级的网页架构设计

一、命名与核心概念 “双容器嵌套布局法”,核心是通过两层容器嵌套构建网页结构:外层容器负责控制布局的“宏观约束”(如页面最大宽度、背景色等),内层容器聚焦“微观排版”(内容居中、内边距调整、红色内容…

基于深度学习的自然语言处理:构建情感分析模型

前言 自然语言处理(NLP)是人工智能领域中一个非常活跃的研究方向,它致力于使计算机能够理解和生成人类语言。情感分析(Sentiment Analysis)是NLP中的一个重要应用,其目标是从文本中识别和提取情感倾向&…

JWT原理及利用手法

JWT 原理 JSON Web Token (JWT) 是一种开放的行业标准,用于在系统之间以 JSON 对象的形式安全地传输信息。这些信息经过数字签名,因此可以被验证和信任。其常用于身份验证、会话管理和访问控制机制中传递用户信息。 与传统的会话令牌相比,JWT…

DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_睡眠记录日历示例(CalendarView01_30)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录DeepS…

git的diff命令、Config和.gitignore文件

diff命令:比较git diff xxx:工作目录 vs 暂存区(比较现在修改之后的工作区和暂存区的内容)git diff --cached xxx:暂存区 vs Git仓库(现在暂存区内容和最一开始提交的文件内容的比较)git diff H…