当前位置: 首页 > news >正文

Python-深度学习(一)

目录

一、初识torch

1、概念

2、常见深度学习框架

二、tensor(张量)

1、概念

2、特点

3、数据类型

三、tensor使用

1、创建

1.1 torch.tensor

1.2 torch.Tensor

1.3 torch.IntTensor

1.4 线性张量

1.5 随机张量

2、tensor数据转换

2.1 tensor转numpy

2.2 numpy转tensor

3、获取元素值

4、元素值运算

5、阿达玛积

6、tensor相乘

7、其他


一、初识torch

        PyTorch,简称Torch,主流的经典的深度学习框架,熟练掌握PyTorch的使用,会为学习网络搭建、模型训练等打下基础。

        1、概念

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

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

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

        2、常见深度学习框架

除了PyTorch,还有很多其它常见的深度学习框架:

TensorFlow: Google开发,广泛应用于学术界和工业界。TensorFlow提供了灵活的构建、训练                             和部署功能,并支持分布式计算

Keras: Keras是一个高级神经网络API,已整合到TensorFlow中

PaddlePaddle: PaddlePaddle(飞桨)是百度推出的开源深度学习平台,旨在为开发者提供一                                个易用、高效的深度学习开发框架

MXNet:由亚马逊开发,具有高效的分布式训练支持和灵活的混合编程模型

Caffe:具有速度快、易用性高的特点,主要用于图像分类和卷积神经网络的相关任务

CNTK :由微软开发的深度学习框架,提供了高效的训练和推理性能。CNTK支持多种语言的接口,包括Python、C++和C#等

Chainer:由Preferred Networks开发的开源深度学习框架,采用动态计算图的方式

二、tensor(张量)

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

# 使用pytorch需要先用import导入库
import torch

        1、概念

        张量是一个多维数组,通俗来说可以看作是扩展了标量、向量、矩阵的更高维度的数组

(标量:0维张量;向量:1维张量;矩阵:2维张量)

        张量可以在 GPU 上加速运行,通过device进行设备指定,默认是CPU,(pytorch是CPU版本的不能使用)

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

        2、特点

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

        GPU支持:tensor可以通过 “ .to("cuda") ” 移动到GPU上进行加速计算

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

        3、数据类型

        PyTorch中有3种数据类型:浮点数、整数、布尔。其中,浮点数和整数又分为8位、16位、32位、64位,加起来共9种

三、tensor使用

        1、创建

1.1 torch.tensor

        创建tensor的函数中有两个有默认值的参数dtype和device, 分别代表数据类型和计算设备,可以通过属性dtype和device获取,该API是根据指定的数据创建张量

1.2 torch.Tensor

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

torch.Tensor与torch.tensor区别

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

1.3 torch.IntTensor

        用于创建指定类型的张量,还有诸如Torch.FloatTensor、 torch.DoubleTensor、 torch.LongTensor......等

       (如果数据类型不匹配,那么在创建的过程中会进行类型转换,要尽可能避免,防止数据丢失 )

1.4 线性张量

        使用torch.arange 和 torch.linspace 创建线性张量

1.5 随机张量

        使用torch.randn 创建随机张量mean

(不设置随机数种子,每次结果都会不一样)

        2、tensor数据转换

2.1 tensor转numpy

        分为内存共享(浅拷贝)和内存不共享(深拷贝)

2.2 numpy转tensor

        同样分为内存共享(浅拷贝)和内存不共享(深拷贝)

        3、获取元素值

        我们可以把单个元素tensor转换为Python数值,这是非常常用的操作。

        和Tensor的维度没有关系,都可以取出来,仅适用于CPU张量

        4、元素值运算

        常见的加减乘除次方取反开方等各种操作,带有 "_" 的方法则会替换原始值

        5、阿达玛积

        两个形状相同的矩阵或张量对应位置的元素相乘,它与矩阵乘法不同,矩阵乘法是线性代数中的标准乘法,而阿达玛积是逐元素操作

(在 PyTorch 中,可以使用 mul() 函数或者 * 来实现 )

        6、tensor相乘

        矩阵乘法是线性代数中的一种基本运算,用于将两个矩阵相乘,生成一个新的矩阵

(矩阵乘法要求两个矩阵的形状必须一个是(M,N),一个是(N,P))

        7、其他

        tensor还可以使用许多其他操作:

                形状操作:它允许你灵活地调整张量的维度和结构,以适应不同的计算需求。                                                (view:高效,但需要张量在内存中是连续的;reshape:更灵活,但涉及                                       内存复制 )

                transpose :用于交换张量的两个维度,注意,是2个维度,它返回的是原张量的视                                              图,即返回新张量,原张量不变

                permute:通过重新排列张量的维度来返回一个新的张量不改变张量的数据,只改变                                    维度的顺序

特性permute()transpose()
功能可以同时调整多个维度的顺序只能交换两个维度的顺序
灵活性更灵活较简单
使用场景适用于多维张量适用于简单的维度交换

无论哪种,都有可能使重排后的张量非连续(is_contiguous() 返回 False),必要时(需要连续内存 )可以调用 .contiguous()

                升维降维unsqueeze:用于在指定位置插入一个大小为 1 的新维度

                                squeeze:用于移除所有大小为 1 的维度,或移除指定维度的大小为 1 的维度

                广播:同numpy中的广播几乎相同

(tensor的内容太多,有点超篇幅,但强迫症患者不想分部分内容到第二篇里面,简写的操作不是不重要,相反同样很重要!!!)

http://www.xdnf.cn/news/1311085.html

相关文章:

  • flash通信
  • 机器学习核心概念精要:从定义到评估
  • C++STL标准模板库详解
  • sql链接的url中serverTimezone的作用
  • MQ迁移方案
  • Unity 游戏提升 Android TargetVersion 相关记录
  • 深入了解 swap:作用、局限与分区建立
  • (第十七期)HTML图像标签详解:从入门到精通
  • 解决html-to-image在 ios 上dom里面的图片不显示出来
  • [Linux] Linux交换空间管理 Linux系统启动原理
  • 8.16 pq
  • 从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)
  • 嵌入式硬件篇---运算放大器
  • 要想在Trae运行Java程序,该怎样配置Java环境?
  • TOGAF八步一法笔记2
  • TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别
  • RocketMq面试集合
  • 暴雨服务器:以定制化满足算力需求多样化
  • 小白挑战一周上架元服务——元服务开发06
  • 肖臻《区块链技术与应用》第20-22讲 - 以太坊难度调整、权益证明和智能合约
  • 415. 字符串相加
  • Java设计模式之《工厂模式》
  • 【Java web】HTTP 协议详解
  • HTTP 1.0, 2.0 和 3.0 有什么区别?
  • OpenAI TTS API + Web 前端 AudioContext 实战方案
  • (论文速读)ViDAR:视觉自动驾驶预训练框架
  • leetcode-139. 单词拆分-C
  • 中本聪思想与Web3的困境:从理论到现实的跨越
  • 从依赖到自研:一个客服系统NLP能力的跃迁之路
  • 昇腾AI自学Day2-- 深度学习基础工具与数学