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

深度学习:张量标量概念、PyTorch张量创建、类型转换等

前言:前一篇文章介绍了PyTorch概念,此次介绍PyTorch的API

本文目录:

  • 一、张量和标量
    • 张量
    • 标量
    • 标量与张量的关系
  • 二、PyTorch创建张量
    • (一)根据torch.tensor(data=, dtype=) 根据指定数据创建张量;
    • (二)torch.Tensor(size=) 根据形状创建张量, 其也可用来创建指定数据或者指定类型的张量;
    • (三)torch.arange(start=, end=, step=):固定步长线性张量;torch.linspace(start=, end=, steps=):固定元素数线性张量;
    • (四)torch.randn/rand(size=) 创建随机浮点类型张量;torch.randint(low=, high=, size=) 创建随机整数类型张量,左闭右开;torch.initial_seed() 和 torch.manual_seed(seed=) 随机种子设置;
    • (五)torch.zeros(size=) 和 torch.zeros_like(input=) 创建全0张量;
    • (六)torch.ones(size=) 和 torch.ones_like(input=) 创建全1张量;
    • (七)torch.full(size=, fill_value=) 和 torch.full_like(input=, fill_value=) 创建全为指定值张量;
  • 三、类型转换
    • (一)张量类型转换
    • (二)张量、标量和numpy相互转换

一、张量和标量

张量和标量是深度学习和科学计算中最基本的数据表示形式,它们之间有着明确的区别和联系。

张量

元素为同一种数据类型的多维矩阵,与NumPy数组类似,张量既有数值,也有方向,可以看做是标量的高维扩展。

标量

标量是零维的单个数值,没有方向,只有大小。

在这里插入图片描述

标量与张量的关系

在这里插入图片描述

二、PyTorch创建张量

(一)根据torch.tensor(data=, dtype=) 根据指定数据创建张量;

import numpy as np
# 导入torch库,用于创建和操作张量
import torch# 创建并打印各种形状和类型的张量
print(torch.tensor(10))
print(torch.tensor([10],dtype=torch.int))
print(torch.tensor([[10]]))
print(torch.tensor([[[10]]]))
print(torch.tensor([[10,20],[30,40]]))# 从numpy数组创建并打印张量
print(torch.tensor(np.array([[10,20],[30,40]])))

(二)torch.Tensor(size=) 根据形状创建张量, 其也可用来创建指定数据或者指定类型的张量;

# 创建并打印各种形状的浮点数张量
print(torch.Tensor(5))# 指定形状,多的‘.’代表浮点,生成5个0
print(torch.Tensor(2,3))# 指定形状,生成2行3列0(浮点数)
print(torch.Tensor(size=(2,3)))   #指定size
# 计算并打印张量的维度
print(torch.Tensor([10]).ndim)
print(torch.Tensor([[[10]]]).ndim)# 通过列表和numpy数组创建并打印张量
print(torch.Tensor([[10,20],[30,40]]))
print(torch.Tensor(np.array([[10,20],[30,40]])))# 使用指定的数据类型创建并打印张量
print(torch.IntTensor([[10.2,20.7],[30.5,40.9]]))# 输出10,20,30,40,int32
print(torch.FloatTensor([[10,20],[30,40]]))# 输出10,20,30,40,float32
print(torch.LongTensor([[10,20],[30,40]]))# int64
print(torch.ShortTensor([[10,20],[30,40]]))# int16
print(torch.ByteTensor([[10,20],[30,40]]))# uint8
print(torch.HalfTensor([[10,20],[30,40]]))# float16

(三)torch.arange(start=, end=, step=):固定步长线性张量;torch.linspace(start=, end=, steps=):固定元素数线性张量;

# 1. 在指定区间按照步长生成元素 [start, end, step) 左闭右开
data = torch.arange(0, 10, 2)
print(data)# 2. 在指定区间按照元素个数生成 [start, end, steps] 左闭右闭
# step = (end-start) / (steps-1)
# value_i = start + step * i
data = torch.linspace(0, 9, 10)
print(data)

(四)torch.randn/rand(size=) 创建随机浮点类型张量;torch.randint(low=, high=, size=) 创建随机整数类型张量,左闭右开;torch.initial_seed() 和 torch.manual_seed(seed=) 随机种子设置;

# 1. 创建随机张量
data = torch.randn(2, 3)  # 创建2行3列张量
print(data)
# 查看随机数种子
print('随机数种子:', torch.initial_seed())# 2. 随机数种子设置 
torch.manual_seed(100)
data = torch.randn(2, 3)
print(data)
print('随机数种子:', torch.initial_seed())

(五)torch.zeros(size=) 和 torch.zeros_like(input=) 创建全0张量;

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

(六)torch.ones(size=) 和 torch.ones_like(input=) 创建全1张量;

# 1. 创建指定形状全1张量
data = torch.ones(2, 3)
print(data)# 2. 根据张量形状创建全1张量
data = torch.ones_like(data)
print(data)

(七)torch.full(size=, fill_value=) 和 torch.full_like(input=, fill_value=) 创建全为指定值张量;

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

三、类型转换

(一)张量类型转换

#类型转换
data=torch.rand(2,3)
print(data.dtype)
#类型转换方式1
print(data.type(torch.int32))
print(data.type(torch.float32))
print(data.type(torch.int64))
print(data.type(torch.int16))
print(data.type(torch.int8))
print(data.type(torch.uint8))#类型转换方式2
print(data.type(torch.double))
print(data.type(torch.long))
print(data.type(torch.short))
print(data.type(torch.half))
print(data.type(torch.bool))
#类型转换方式3
print(data.type(torch.ShortTensor))
print(data.type(torch.FloatTensor))
print(data.type(torch.LongTensor))
print(data.type(torch.IntTensor))
print(data.type(torch.DoubleTensor))
print(data.type(torch.HalfTensor))

(二)张量、标量和numpy相互转换

#标量转numpy
print(data.numpy())#numpy转张量,共享内存,但id不同
n1=np.array([1,2,3])
print(n1,id(n1))
t1=torch.from_numpy(n1)
print(t1,id(t1))   #n1和t1的id不同
【验证n1和t1是否共享内存:
n1[0] = 100  # 修改 NumPy 数组
print("修改后的 NumPy 数组:", n1)
print("PyTorch 张量是否同步变化:", t1)  # 结果显示:t1同步变为 tensor([100, 2, 3]),说明n1和t1共享内存】#使用copy不共享内存
n2=np.array([1,2,3])
print(n2,id(n2))
print(torch.from_numpy(n2.copy()),id(torch.from_numpy(n2.copy())))  #张量转标量
n3=3
print(torch.tensor(n3).item())  #先将3转为张量,再转为了标量;单数值numpy转标量也可用item()#标量转张量
print(torch.tensor(3))   #标量3被转为张量

今天的分享到此结束。

相关文章:

  • 医院部署IBMS系统时,哪些关键因素需要重点权衡与规划
  • Webpack 剖析与策略
  • <论文>自注意力序列推荐模型SASRec
  • AES加密
  • C语言二级指针和void *应用
  • 说一下Java里面线程池的拒绝策略
  • .NET 中的异步编程模型
  • 软件测试的艺术与科学:构建商业级产品的优雅草卓伊凡
  • 接口访问子类特有方法的几种方式
  • 运放负反馈电路原理分析
  • 运行springboot
  • Middleware
  • AWK6943:MP9943 替代DCDC兼容方案及技术优势
  • VScode中如何创建项目分支
  • uniswap v4 TickBitmap库函数解析
  • 力扣刷题——二分查找
  • 2022年TASE SCI2区,学习灰狼算法LGWO+随机柔性车间调度,深度解析+性能实测
  • 关于MySql深分页的问题及优化方案
  • 25年春招:携程java开发一面
  • 华为OD机试_2025 B卷_计算最大乘积(Python,100分)(附详细解题思路)
  • 有做外国人的零售网站吗/网站统计分析工具
  • 徽章设计制作网站/文库百度登录入口
  • 湖北建设人力资源网站/最新百度快速排名技术
  • wordpress指定404/seo优化运营专员
  • 成都专门做公司网站的公司/百度我的订单app
  • 宠物店网站建设计划书/seo软件服务