《动手学深度学习》第二章笔记

时间:2024-11-04 19:19:28

第二章

  • 数据操作
    • 创建张量
    • 操作
      • 算数操作
      • 索引
      • 改变形状
      • 线性代数
    • 广播机制
    • 运算的内存开销
    • Tensor和Numpy的相互转换

数据操作

pytorch中,torch.Tensor是存储和变换数据的主要工具,Tensor提供GPU计算和自动求梯度等功能。N维数组是机器学习和神经网络的主要数据结构

  • tensor(张量):多维数组
  • 标量:0维张量
  • 向量:一维张量
  • 矩阵:二维张量
    在这里插入图片描述
    在这里插入图片描述

创建张量

import torch # 导入pytorch

x=torch.empty(5, 3) # 创建⼀个5x3的未初始化的 Tensor
print(x)

y=torch.rand(5, 3) # 创建⼀个5x3的随机初始化的 Tensor
print(y)

z=torch.zeros(5, 3, dtype=torch.long)# 创建⼀个5x3的long型全0的 Tensor
print(z)

w=torch.tensor([5.5, 3]) # 直接根据数据集创建

控制台输出

tensor([[-1.1745e-17,  1.0412e-42, -1.1745e-17],
        [ 1.0412e-42, -1.1747e-17,  1.0412e-42],
        [-1.1747e-17,  1.0412e-42, -1.1740e-17],
        [ 1.0412e-42, -1.1740e-17,  1.0412e-42],
        [-1.1746e-17,  1.0412e-42, -1.1746e-17]])
tensor([[0.2267, 0.6189, 0.2569],
        [0.3100, 0.8409, 0.9816],
        [0.6405, 0.5193, 0.0425],
        [0.5121, 0.7064, 0.0093],
        [0.8851, 0.1488, 0.3974]])
tensor([[0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0],
        [0, 0, 0]])

还可以通过现有的tensor来创建

还有很多函数可以创建tensor,可以查看官网,这些方法都可以在创建的时候,指定数据类型dtype和存放设备device(GPU还是CPU)

操作

算数操作

pytorch中一种运算,可能有多种形式
在这里插入图片描述

索引

可以通过索引的方式,访问tensor的一部分,索引的结果和原数据共享内存,修改一个,另一个也被修改
在这里插入图片描述

改变形状

view() 来改变 Tensor 的形状,不会改变内存,只是改变了对该张量的观察视角
在这里插入图片描述

线性代数

pytorch支持线性代数的操作
在这里插入图片描述

广播机制

当对两个形状不同的 Tensor 按元素运算时,可能会触发⼴播(broadcasting)机制:先适当复制元素使这两个 Tensor 形状相同后再按元素运算。例如:
在这里插入图片描述

运算的内存开销

  • view操作不会改变内存
  • y=x + y会改变内存,y指向新的内存

可以通过python中的Id来验证,第一个代码,可以说明,内存发生了改变。但是,可以通过切片功能,将新的元素保存到原来的内存中
在这里插入图片描述

Tensor和Numpy的相互转换