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

小白的进阶之路系列之九----人工智能从初步到精通pytorch综合运用的讲解第二部分

张量是PyTorch中的核心数据抽象。这个交互式笔记本提供了一个深入的介绍torch. Tensor 类.,

首先,让我们导入PyTorch模块。我们还将添加Python的数学模块来简化一些示例。

import torch
import math

创建张量

创建张量最简单的方法是调用torch.empty():

x = torch.empty(3, 4)
print(type(x))
print(x)

输出为:

<class 'torch.Tensor'>
tensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]])

让我们总结一下刚才的内容:

  • 我们使用火炬模块附带的众多工厂方法之一创建了一个张量。

  • 张量本身是二维的,有3行4列。

  • 返回的对象类型是torch。Tensor,它是torch.FloatTensor的别名;默认情况下,PyTorch张量使用32位浮点数填充。(下面是关于数据类型的更多信息。)

  • 在打印张量时,您可能会看到一些看起来随机的值。torch.empty()调用为张量分配内存,但没有用任何值初始化它-因此您看到的是分配时内存中的内容。

关于张量及其维数和术语的简要说明:

  • 你有时会看到一个一维张量叫做矢量。

  • 同样地,二维张量通常被称为矩阵。

  • 任何二维以上的东西通常都叫做张量。

通常情况下,您需要用某个值初始化张量。常见的情况是全零、全一或随机值,torch模块为所有这些提供了工厂方法:

zeros = torch.zeros(2, 3)
print(zeros)ones = torch.ones(2, 3)
print(ones)torch.manual_seed(1729)
random = torch.rand(2, 3)
print(random)

输出为:

tensor([[0., 0., 0.],[0., 0., 0.]])
tensor([[1., 1., 1.],[1., 1., 1.]])
tensor([[0.3126, 0.3791, 0.3087],[0.0736, 0.4216, 0.0691]])

工厂方法所做的都是你所期望的——我们有一个全是0的张量,另一个全是1的张量,还有一个是0到1之间的随机值。

随机张量和播种

说到随机张量,你注意到它之前对torch.manual_seed()的调用了吗?用随机值初始化张量(比如模型的学习权值)是很常见的,但有时——尤其是在研究环境中——你需要对结果的可重复性有一定的保证。手动设置随机数生成器的种子是这样做的。让我们仔细看看:

torch.manual_seed(1729)
random1 = torch.rand(2, 3)
print(random1)random2 = torch.rand(2, 3)
print(random2)torch.manual_seed(1729)
random3 = torch.rand(2, 3)
print(random3)random4 = torch.rand(2, 3)
print(random4)

输出为:

tensor([[0.3126, 0.3791, 0.3087],[0.0736, 0.4216, 0.0691]])
tensor([[0.2332, 0.4047, 0.2162],[0.9927, 0.4128, 0.5938]])
tensor([[0.3126, 0.3791, 0.3087],[0.0736, 0.4216, 0.0691]])
tensor([[0.2332, 0.4047, 0.2162],[0.9927, 0.4128, 0.5938]])

您应该在上面看到的是random1和random3携带相同的值,random2和random4也是如此。手动设置RNG的种子会重置它,所以在大多数情况下,基于随机数的相同计算应该会提供相同的结果。

有关更多信息,请参阅PyTorch关于再现性的文档。

张量的形状

通常,当你在两个或更多张量上执行操作时,它们需要具有相同的形状——也就是说,在每个维度上具有相同数量的维数和相同数量的单元。为此,我们使用了torch.*_like()方法:

x = torch.empty(2, 2, 3)
print(x.shape)
print(x)empty_like_x = torch.empty_like(x)
print(empty_like_x.shape)
print(empty_like_x)zeros_like_x = torch.zeros_like(x)
print(zeros_like_x.shape)
print(zeros_like_x)ones_like_x = torch.ones_like(x)
print(ones_like_x.shape)
print(ones_like_x)rand_like_x = torch.rand_like(x)
print(rand_like_x.shape)
print(rand_like_x)

输出为:

torch.Size([2, 2, 3])
tensor([[[0., 0., 0.],[0., 0., 0.]],[[0., 0., 0.],[0., 0., 0.]]])
torch.Size([2, 2, 3])
tensor([[[0., 0., 0.],[0., 0., 0.]],[[0., 0., 0.],[0., 0., 0.]]])
torch.Size([2, 2, 3])
tensor([[[0., 0., 0.],[0., 0., 0.]],[[0., 0., 0.],[0., 0., 0.]]])
torch.Size([2, 2, 3])
tensor([[[1., 1., 1.],[1., 1., 1.]],[[1., 1., 1.],[1., 1., 1.]]])
torch.Size([2, 2, 3])
tensor([[[0.6128, 0.1519, 0.0453],[0.5035, 0.9978, 0.3884]],[[0.6929, 0.1703, 0.1384],[0.4759, 0.7481, 0.0361]]])

上面代码单元中的第一个新内容是在张量上使用.shape属性。这个属性包含了张量每个维度的范围列表——在我们的例子中,x是一个形状为2 x 2 x 3的三维张量。

下面,我们调用。empty_like()、。zeros_like()、。ones_like()和。rand_like()方法。使用.shape属性,我们可以验证这些方法中的每一个都返回具有相同维度和范围的张量。

最后一种创建张量的方法是直接从PyTorch集合中指定它的数据:

some_constants = torch.tensor([[3.1415926, 2.71828], [1.61803, 0.0072897]])
print(some_constants)some_integers = torch.tensor((2, 3, 5, 7, 11, 13, 17, 19))
print(some_integers)more_integers = torch.tensor(((2, 4, 6), [3, 6, 9]))
print(more_integers)

输出为:

tensor([[3.1416, 2.7183],[1.6180, 0.0073]])
tensor([ 2,  3,  5,  7, 11, 13, 17, 19])
tensor([[2, 4, 6],[3, 6, 9]])

如果你已经在Python元组或列表中拥有数据,使用torch.tensor()是创建张量最直接的方法。如上所示,嵌套集合将产生一个多维张量。

张量数据类型

设置张量的数据类型有两种方法:

a = torch.ones((2, 3), dtype=torch.int16)
print(a)b = torch.rand((2, 3), dtype=torch
http://www.xdnf.cn/news/10388.html

相关文章:

  • IDEA,Spring Boot,类路径
  • Vue框架2(vue搭建方式2:利用脚手架,ElementUI)
  • SQL注入攻击的方法与预防
  • 神经网络-Day42
  • 量化面试绿皮书:1. 海盗分金博弈
  • 【C/C++】面试常考题目
  • (面试)获取View宽高的几种方式
  • vim 的基本使用
  • 华为深度学习面试手撕题:手写nn.Conv2d()函数
  • C++: STL简介与string类核心技术解析及其模拟实现
  • vue3动态路由的实现以及目录权限的设置
  • Eclipse 修改字符集
  • [Godot] 如何导出安卓 APK 并在手机上调试
  • 【金融基础学习】债券市场与债券价值分析
  • ck-editor5的研究 (3):初步使用 CKEditor5 的事件系统和API
  • Mac电脑上本地安装 MySQL并配置开启自启完整流程
  • 历史数据分析——广州港
  • 计算机网络(5)——数据链路层
  • 【数据结构】图的存储(十字链表)
  • 微调大模型:什么时候该做,什么时候不该做?
  • 鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
  • 【火山引擎 大模型批量处理数据教程-详细】
  • 基于千帆大模型的AI体检报告解读系统实战:使用OSS与PDFBox实现PDF内容识别
  • WEBSTORM前端 —— 第3章:移动 Web —— 第3节:移动适配
  • Rust 学习笔记:发布一个 crate 到 crates.io
  • Python 序列的修改、散列和切 片(Vector类第5版:格式化)
  • qwen3解读
  • Java BigInteger类详解与应用
  • C语言之编译器集合
  • 蓝桥杯java2021年十二届国赛大学A组真题答案整理