PyTorch基础操作

一、Tensor

在 PyTorch 中,张量(Tensor)是一个核心概念,它是一个用于存储和操作数据的多维数组,类似于 NumPy 的 ndarray,但与此同时,它也支持 GPU 加速,这使得在大规模数据上进行科学计算变得更加高效。

在 PyTorch 中,张量的基本特性和功能包括:

  1. 多维数组:PyTorch 张量可以有多个维度,允许你存储和处理高维数据集,如图像(通常是 3 维:高度、宽度和颜色通道),视频(4 维:时间、高度、宽度和颜色通道)等。

  2. 数据类型:PyTorch 张量支持不同的数据类型,如 float32、float64、int8、int16、int32、int64 等。

  3. 设备兼容性:张量可以存储在 CPU 或 GPU 上,这意味着你可以利用 GPU 进行高效的数值计算。

  4. 自动微分:PyTorch 的一个关键特性是它的自动微分引擎(Autograd),这允许你自动计算张量的梯度,这对于训练神经网络非常重要。

  5. 与 NumPy 互操作性:PyTorch 张量可以轻松地与 NumPy 数组进行转换,使得在这两个库之间切换变得简单。

  6. API 富集性:PyTorch 提供了丰富的 API 来创建和操作张量,包括数学运算、线性代数、统计和随机抽样等功能。

  7. 动态计算图:PyTorch 使用动态计算图(称为动态计算图),这允许在运行时构建计算图,为模型构建提供更大的灵活性。

1.1Tensor初始化

一些初始化的方法:

torch.empty(size): 创建一个未初始化的张量。这意味着张量中的数据可能是任何值,包括非常大或非常小的数字。

torch.zeros(size): 创建一个指定大小的张量,并用 0 填充。

torch.ones(size): 创建一个指定大小的张量,并用 1 填充。

torch.rand(size): 创建一个指定大小的张量,并用区间 [0, 1) 内的均匀分布的随机数填充。

torch.randn(size): 创建一个指定大小的张量,并用标准正态分布(均值为0,方差为1)的随机数填充。

torch.arange(start, end, step): 创建一个一维张量,包含从 start 到 end 的序列,间隔为 step。

torch.linspace(start, end, steps): 创建一个一维张量,包含从 start 到 end 的等间隔的 steps 个点。

torch.eye(n): 创建一个 n x n 的单位矩阵。

torch.full(size, fill_value): 创建一个指定大小的张量,并用 fill_value 填充。

torch.tensor(data): 从 data (例如列表、数组)创建张量。

torch.clone(): 克隆一个张量,新的张量与原始张量有相同的大小和数据,但存储在不同的内存地址。

torch.from_numpy(ndarray): 从 NumPy 数组创建张量。

 几个示例:

import torch# 创建一个 3x3 的张量,其中所有元素都是 0。
# 这在初始化权重或清除数据时非常有用。
zeros_tensor = torch.zeros(3, 3)
print("Zeros Tensor:\n", zeros_tensor)# 创建一个 2x2 的张量,其中所有元素都是 1。
# 这在创建初始权重或需要所有元素都是1的情况下非常有用。
ones_tensor = torch.ones(2, 2)
print("Ones Tensor:\n", ones_tensor)# 创建一个 4x4 的张量,其中所有元素都是 0 到 1 之间的随机数。
# 这在需要随机初始化数据时非常有用。
rand_tensor = torch.rand(4, 4)
print("Random Tensor:\n", rand_tensor)

结果:

1.2 tensor的属性

dtype: 表示Tensor中元素的数据类型,例如torch.float32, torch.int64等。

shape: Tensor的形状,即各个维度的大小。例如,一个3x4的矩阵将有一个形状为(3, 4)的Tensor。

device: Tensor所在的设备,如CPU或GPU。例如device='cuda:0'表示Tensor存储在第一个GPU上。

layout: 内存中Tensor的布局方式,如torch.sparse_coo_tensor

示例:

import torch# 设置设备为CPU,后续声明为CUDA,但最终使用的是CUDA
dev = torch.device("cpu")
dev = torch.device("cuda")# 创建一个包含两个元素[2, 2]的一维张量,数据类型为float32,存储在CUDA设备上
a = torch.tensor([2, 2], dtype=torch.float32, device=dev)
print(a)# 创建一个二维张量,表示稀疏张量的坐标索引
i = torch.tensor([[0, 1, 2], [0, 1, 2]])# 创建一个一维张量,表示稀疏张量在这些坐标位置的值
v = torch.tensor([1, 2, 3])# 使用坐标索引和值创建一个4x4的稀疏张量,然后转换为密集张量
# 数据类型为float32,存储在CUDA设备上
a = torch.sparse_coo_tensor(i, v, (4, 4), dtype=torch.float32, device=dev).to_dense()
print(a)

结果:

  • 密集张量:在密集张量中,每个元素(包括零值)都会被存储。例如,一个 3x3 的密集张量将存储所有 9 个元素。
  • 稀疏张量:稀疏张量仅存储非零元素及其索引,这使得它们在处理大量包含零值的数据时更加高效。例如,如果一个 3x3 的矩阵大部分元素为零,稀疏张量只会存储非零元素及其位置信息。

1.3tensor的算术运算

1.3.1加法

c = a + b
c = torch.add(a,b)
a.add(b)
a.add_(b)

前三个一样输出的都是a和b的和,不改变a,b的值

a.add_(b) 会把他们的和赋值给a

1.3.2乘法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 放大翻转动画

<template><div class="container" @mouseenter="startAnimation" @mouseleave="stopAnimation"><!-- 旋方块 --><div class="box" :class="{ rotate-scale-up-hor: isAnimating }"><!-- 元素内…

使用爬虫爬取热门电影

文章目录 网站存储视频的原理M3U8文件解读网站分析代码实现 网站存储视频的原理 首先我们来了解一下网站存储视频的原理。 一般情况下&#xff0c;一个网页里想要显示出一个视频资源&#xff0c;必须有一个<video>标签&#xff0c; <video src"xxx.mp4"&…

Note: A Journey Across Canada

A Journey Across Canada 一场横穿加拿大的旅行 across journey After a quiz last autumn, Kuang crossed the continent eastward to Toronto to visit his schoolmate, the distance measuring approximately 5000 kilometers. 去年秋天一次考试后&#xff0c;Kuang向东穿…

数字人克隆系统开发公司?

广州硅基技术开发限公司是一家位于中国广东省广州市的科技公司。该公司专注于人工智能&#xff08;AI&#xff09;领域的研发和创新。广州硅基以技术创新和解决方案为核心&#xff0c;致力于为客户提供高质量的人工智能产品和服务。 广州硅基技术的主要业务包括但不限于&#…

stm32学习笔记:TIIM-输入捕获

输入捕获理论 4个输入捕获和输出比较通道&#xff0c;共用4个CCR寄存器 另外它们的CH1到CH4&#xff0c;4个通道的引脚&#xff0c;也是共用的。 所以对于同一个定时器&#xff0c;输入捕获和输出比较只能使用其中一个&#xff0c;不能同时使用。 电平跳变&#xff1a;上升沿…

《动手学深度学习》学习笔记 第5章 深度学习计算

本系列为《动手学深度学习》学习笔记 书籍链接&#xff1a;动手学深度学习 笔记是从第四章开始&#xff0c;前面三章为基础知道&#xff0c;有需要的可以自己去看看 关于本系列笔记&#xff1a; 书里为了让读者更好的理解&#xff0c;有大篇幅的描述性的文字&#xff0c;内容很…

Spring学习 Spring概述

1.1.Spring介绍 ​ Spring是轻量级Java EE应用开源框架&#xff08;官网&#xff1a; http://spring.io/ &#xff09;&#xff0c;它由Rod Johnson创为了解决企业级编程开发的复杂性而创建 1.2.简化应用开发体现在哪些方面&#xff1f; IOC 解决传统Web开发中硬编码所造成的…

python中collections.abc.Mapping 和collections.Mapping的区别

文章目录 在 Python 中&#xff0c;collections.abc.Mapping 和 collections.Mapping 都是用于表示映射类型&#xff08;即键值对的集合&#xff0c;例如字典&#xff09;的抽象基类。它们的区别在于它们的来源和使用方式。 collections.abc.Mapping 是 collections.abc 模块中…

1月5日代码随想录完全二叉树的节点个数

222.完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在…

即时设计:轻松实现设计稿动画,打造独具魅力的GIF作品

制作动画 随着动画设计越来越受欢迎&#xff0c;设计师们需要一款强大的工具&#xff0c;以便轻松控制设计稿元素的属性&#xff0c;实现动画效果。今天&#xff0c;我们向您推荐一款具备帧动画功能的设计工具&#xff0c;它可以让您轻松调整元素的宽高、相对位置等属性&#x…

Spring AI 指南

近年来&#xff0c;人工智能技术的迅猛发展改变了我们对科技的看法&#xff0c;并在各个领域引发了巨大的变革。每个人都希望在自己的项目上能够使用人工智能。Spring 框架提供了一个名为 “Spring AI” 的项目&#xff0c;Spring AI 项目旨在简化包含人工智能功能的应用程序的…

Matlab绘制动态心形线

1. 代码 for alpha0:0.1:30 x-1.8:0.001:1.8; y(x.^2).^(1/3)0.9*(3.3-x.^2).^(1/2).*sin(alpha*pi*x); plot(x,y,r-,LineWidth,1.2); set(gca,YGrid,on); axis([-3,3,-2,4]); text(-2,3.35,$f(x)x^{\frac{2}{3}}0.9(3.3-x^2)^{\frac{1}{2}}sin(\alpha\pi x)$,Interpreter,lat…

Geotrust DV通配符证书保护域名数量

Geotrust是一家知名的SSL证书提供商&#xff0c;旗下有多种类型的SSL数字证书&#xff0c;保护网站数据在传输过程中的安全性和完整性&#xff0c;帮助用户确认其网站的安全。通配符SSL证书是Geotrust颁发的一种可以同时保护多个域名站点的SSL证书。今天就随SSL盾小编了解Geotr…

Toshiba 数字隔离器助力工业应用实现稳定的高速隔离数据传输

隔离器件是将输入信号进行转换并输出&#xff0c;以实现输入、输出两端电气隔离的一种安规器件。电气隔离能够保证强电电路和弱电电路之间信号传输的安全性&#xff0c;如果没有进行电气隔离&#xff0c;一旦发生故障&#xff0c;强电电路的电流将直接流到弱电电路&#xff0c;…

啊哈c语言——逻辑挑战8:验证哥德巴赫猜想

上面这封书信是普鲁士数学家哥德巴赫在1742年6月7日写给瑞士数学家欧拉的&#xff0c;哥德巴赫在书信中提出了“任一大于2的整数都可以写成3个质数之和”的猜想。当时&#xff0c;哥德巴赫遵照的是“1也是素数”的约定。现今&#xff0c;数学界已经不使用这个约定了。哥德巴赫原…

Spring Boot 整合 Knife4j(快速上手)

关于 Knife4j 官方文档&#xff1a;https://doc.xiaominfo.com/ Knife4j是一个基于Swagger的API文档生成工具&#xff0c;它提供了一种方便的方式来为Spring Boot项目生成在线API文档。Knife4j的特点包括&#xff1a; 自动化生成&#xff1a;通过Swagger注解&#xff0c;Kn…

凸优化 3:最优化方法

凸优化 3&#xff1a;最优化方法 最优化方法适用场景对比费马引理一阶优化算法梯度下降最速下降 二阶优化算法牛顿法Hessian矩阵Hessian矩阵的逆Hessian矩阵和梯度的区别牛顿法和梯度下降法的区别 拟牛顿法DFP、BFGS/L-BFGS 数值优化算法坐标下降法SMO算法 基于导数的函数优化解…

FCN学习-----第一课

语义分割中的全卷积网络 CVPR IEEE国际计算机视觉与模式识别会议 PAMI IEEE模式分析与机器智能汇刊 需要会的知识点&#xff1a; 神经网络&#xff1a;前向传播和反向传播 卷积神经网络&#xff1a;CNN&#xff0c;卷积&#xff0c;池化&#xff0c;上采样 分类网络&#xff1a…

杨中科 ASP.NETCore Rest

什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道&#xff0c;不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…

【LeetCode】608. 树节点

表&#xff1a;Tree ------------------- | Column Name | Type | ------------------- | id | int | | p_id | int | ------------------- id 是该表中具有唯一值的列。 该表的每行包含树中节点的 id 及其父节点的 id 信息。 给定的结构总是一个有效的树。…