pytorch的介绍以及张量的创建

一.前言

本节我们先来介绍一下pytorch以及一些小知识


世界科技巨头公司的特点分析​​

公司 核心特点 关键技术贡献
​​Google​​ 持续开源+论文驱动,搜索霸主地位 - 2003 Hadoop(大数据) - 2014 TensorFlow(AI框架) - 2017 Transformer - 2018 BERT
​​Meta​​ 工具导向型创新,低调但实用 - Hive(大数据) - FastText(NLP) - PyTorch(动态图框架)
​​微软​​ 传统IT巨头转型成功,通过投资逆袭 - 投资OpenAI实现AI时代逆转
​​BATB​​ 中国科技企业快速追赶,AI领域差距缩小 - 百度(PaddlePaddle)、阿里、腾讯、字节跳动

​​补充说明​​:

  • Google的"被OpenAI压制"主要指2023年后在生成式AI领域的竞争态势。
  • Meta的PyTorch已成为学术界主流(2024年arXiv论文占比超80%)。

主流深度学习框架对比​​

框架 特点 版本演进 适用场景
​​TensorFlow​​ 静态图→动态图转型,企业级支持强 1.x(已淘汰)→ 2.x(主流) 工业部署、移动端
​​PyTorch​​ 动态图设计,开发者友好 1.3-1.10(稳定)→ 2.1+(新特性) 学术研究、快速原型开发
​​PaddlePaddle​​ 中文文档完善,与PyTorch高度兼容 兼容PyTorch API 国内工业场景
​​Caffe​​ 专注CV,配置复杂 已逐渐边缘化 学术研究(历史项目)

​​关键结论​​:

  • PyTorch已成为GitHub星标数最多的框架(2024年超60k stars)。
  • PaddlePaddle迁移成本极低,适合中文开发者。

Python深度学习环境配置指南​​

​​推荐流程​​:

  1. ​安装Anaconda​

    复制代码
    # 下载后直接运行安装包(默认勾选添加PATH)
  2. ​创建虚拟环境​

    复制代码
    conda create -n dl_env python=3.10  # 推荐3.10+版本
  3. ​环境管理​

    复制代码
    conda activate dl_env      # 激活
    conda deactivate           # 退出
  4. ​包安装技巧​

    • 优先使用conda install解决依赖冲突

    • 示例:

      复制代码
      pip install torch==2.3.0 --extra-index-url https://download.pytorch.org/whl/cu118  # 指定CUDA版本

​​避坑提示​​:

  • 避免混用conda和pip安装同一包
  • 虚拟环境与VMware无关(纯Python隔离)

PyTorch数据精度详解​​

​​默认规则​​:

数据类型 默认值 显式声明示例
整型 torch.int64 tensor = torch.tensor([1,2], dtype=torch.int32)
浮点型 torch.float32 tensor = torch.tensor([1.0,2.0], dtype=torch.float16)

​​精度选择建议​​:

  • ​训练阶段​ :必须使用float32(数值稳定性)
  • ​推理部署​ :可尝试float16/int8(节省显存)
  • ​特殊场景​ :int64用于索引/标签

计算机随机数本质​​

​​技术原理​​:

复制代码
import random
random.seed(42)  # 设置种子可复现"随机"结果
print(random.random())  # 伪随机数生成

​​关键特性​​:

  1. ​确定性算法​:基于梅森旋转算法等数学公式
  2. ​种子依赖​:相同种子→相同随机序列
  3. ​应用场景​ :
    • 游戏/模拟(可复现性重要)
    • 加密领域禁用伪随机数(需硬件熵源)

​​扩展知识​​:

  • 真随机数需依赖物理现象(如放射性衰变、热噪声)
  • Linux系统通过/dev/random采集硬件熵

以上内容已整合技术细节与行业现状,如需进一步探讨某个方向(如PyTorch 2.x新特性或框架性能对比),可提供更深入的分析。

PyTorch 是⼀个 Python 深度学习框架,它将数据封装成张量(Tensor)来进⾏运算。PyTorch 中的张量就 是元素为同⼀种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的⼀些运算、 处理的⽅法被封装在类中。

二.张量的基本创建

  1. torch.tensor 根据指定数据创建张量

  2. torch.Tensor 根据形状创建张量, 其也可⽤来创建指定数据的张量

  3. torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量

python 复制代码
import torch
import numpy as np
import random


# 1. 根据已有数据创建张量
def test01():
    # 1. 创建张量标量
    data = torch.tensor(10)
    print(data)
     # 2. numpy 数组, 由于 data 为 float64, 下⾯代码也使⽤该类型
    data = np.random.randn(2, 3)
    data = torch.tensor(data)
    print(data)
    # 3. 列表, 下⾯代码使⽤默认元素类型 float32
    data = [[10., 20., 30.], [40., 50., 60.]]
    data = torch.tensor(data)
    print(data)

 # 2. 创建指定形状的张量
def test02():
    # 1. 创建2⾏3列的张量, 默认 dtype 为 float32
    data = torch.Tensor(2, 3)
    print(data)
    # 2. 注意: 如果传递列表, 则创建包含指定元素的张量
    data = torch.Tensor([10])
    print(data)
    data = torch.Tensor([10, 20])
    print(data)

 # 3. 使⽤具体类型的张量
def test03():
    # 1. 创建2⾏3列, dtype 为 int32 的张量
    data = torch.IntTensor(2, 3)
    print(data)
    # 2. 注意: 如果传递的元素类型不正确, 则会进⾏类型转换
    data = torch.IntTensor([2.5, 3.3])
    print(data)
    # 3. 其他的类型
    data = torch.ShortTensor()  # int16
    data = torch.LongTensor()
    # int64
    data = torch.FloatTensor()  # float32
    data = torch.DoubleTensor() # float64
if __name__ == '__main__':
    test02()

三.创建线性和随机张量

  1. torch.arange 和 torch.linspace 创建线性张量

  2. torch.random.init_seed 和 torch.random.manual_seed 随机种⼦设置

  3. torch.randn 创建随机张量

python 复制代码
import torch

# 1. 创建线性空间的张量
def test01():
    # 1. 在指定区间按照步⻓⽣成元素 [start, end, step)
    data = torch.arange(0, 10, 2)
    print(data)
    # 2. 在指定区间按照元素个数⽣成
    data = torch.linspace(0, 11, 10)
    print(data)

# 2. 创建随机张量
def test02():
    # 1. 创建随机张量
    data = torch.randn(2, 3)  # 创建2⾏3列张量
    print(data)
    # 2. 随机数种⼦设置
    print('随机数种⼦:', torch.random.initial_seed())
    torch.random.manual_seed(100)
    print('随机数种⼦:', torch.random.initial_seed())

if __name__ == '__main__':
 test02()

四.创建01张量

  1. torch.ones 和 torch.ones_like 创建全1张量

  2. torch.zeros 和 torch.zeros_like 创建全0张量

  3. torch.full 和 torch.full_like 创建全为指定值张量

python 复制代码
import torch

# 1. 创建全0张量
def test01():
    # 1. 创建指定形状全0张量
    data = torch.zeros(2, 3)
    print(data)
    # 2. 根据张量形状创建全0张量
    data = torch.zeros_like(data)
    print(data)

# 2. 创建全1张量
def test02():
    # 1. 创建指定形状全0张量
    data = torch.ones(2, 3)
    print(data)
    # 2. 根据张量形状创建全0张量
    data = torch.ones_like(data)
    print(data)
    # 3. 创建全为指定值的张量

def test03():
    # 1. 创建指定形状指定值的张量
    data = torch.full([2, 3], 10)
    print(data)
    # 2. 根据张量形状创建指定值的张量
    data = torch.full_like(data, 20)
    print(data)

if __name__ == '__main__':
    test01()
    test02()
    test03()

五.张量元素类型转换

  1. tensor.type(torch.DoubleTensor)

  2. torch.double()

python 复制代码
import torch

def test():
    data = torch.full([2, 3], 10)
    print(data.dtype)
    # 将 data 元素类型转换为 float64 类型
    # 1. 第⼀种⽅法
    data = data.type(torch.DoubleTensor)
    print(data.dtype)
    # 转换为其他类型
    # data = data.type(torch.ShortTensor)
    # data = data.type(torch.IntTensor)
    # data = data.type(torch.LongTensor)
    # data = data.type(torch.FloatTensor)
    # 2. 第⼆种⽅法
    data = data.double()
    print(data.dtype)
    # 转换为其他类型
    # data = data.short()
    # data = data.int()
    # data = data.long()
    # data = data.float()

if __name__ == '__main__':
    test()

六.总结

在本⼩节中,我们主要学习了以下内容:

  1. 创建张量的⽅式

  2. torch.tensor 根据指定数据创建张量

  3. torch.Tensor 根据形状创建张量, 其也可⽤来创建指定数据的张量

  4. torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量

  5. 创建线性和随机张量

  6. torch.arange 和 torch.linspace 创建线性张量

  7. torch.random.init_seed 和 torch.random.manual_seed 随机种⼦设置

  8. torch.randn 创建随机张量

  9. 创建01张量

  10. torch.ones 和 torch.ones_like 创建全1张量

  11. torch.zeros 和 torch.zeros_like 创建全0张量

  12. torch.full 和 torch.full_like 创建全为指定值张量

  13. 张量元素类型转换

  14. tensor.type(torch.DoubleTensor)

  15. torch.double()

相关推荐
SL_staff21 分钟前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
众壹新能源科技1 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
king13598745501 小时前
LFM2.5-24B-A2B Mac 本地部署:内存估算、GGUF/MLX 与 Python 预检脚本
人工智能·macos
DeeGLMath1 小时前
optimtool最新版加速训练分类任务
人工智能·分类·数据挖掘
在所不辞兄1 小时前
为什么神经网络对对抗扰动和分布偏移往往比较脆弱,而人类感知相对更鲁棒?
人工智能·深度学习·神经网络·机器学习
考拉讲支付1 小时前
母婴亲子服务平台分账架构设计:多场景多方分账与合规清结算实践
大数据·运维·人工智能·微信小程序·架构·微信公众平台
滴啦嘟啦哒1 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
xier_ran1 小时前
【infra之路】AI 编译器学习笔记(十三):AI 编译器全景——TVM、XLA、IREE 与其他
人工智能·笔记·学习
用户837133200761 小时前
感觉终于把复杂的 RAG 技术整理明白了
人工智能·llm