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.hqwc.cn/news/326074.html

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

相关文章

vue简单实现滚动条

背景:产品提了一个需求在一个详情页,一个form表单元素太多了,需要滚动到最下面才能点击提交按钮,很不方便。他的方案是,加一个滚动条,这样可以直接拉到最下面。 优化:1、支持滚动条,…

吉林大学19、21级计算机学院《计算机网络》期末真题试题

一、21级(考后回忆) 一、不定项选择(一共10个选择题,一个两分,选全得满分) 不定项:可以选择1~4个 考点有: ①协议、服务 ②码分多路复用通过接受码片序列,求哪个站点发送…

Java反射篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、反射使用步骤(获取 Class 对象、调用对象方法)二、获取 Class 对象有几种方法三、利用反射动态创建对象实例前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章…

分布式协调系统

分布式协调系统 分布式协调系统解决的进程间的通信和协作,根据是否在同一时间和是否相互引用分为四个模型。 示例系统Chubby 主功能:让客户端实现同步,方法是加锁服务 介绍一下系统: 系统由五台服务器构成,通过pax…

STM32通用定时器-输入捕获-脉冲计数

一、知识点 编码器   两相编码器(正交编码器):两相编码器由 A 相和 B 相组成,相位差为 90 度。当旋转方向为顺时针时,A 相先变化,然后 B 相变化;当旋转方向为逆时针时,B 相先变化…

【leetcode】字符串中的第一个唯一字符

题目描述 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 用例 示例 1: 输入: s “leetcode” 输出: 0 示例 2: 输入: s “loveleetcode” 输出: 2 示例 3: 输入: s “aabb”…

扩展 apiserver 连接认证 ip, apiserver证书更新

本文来自我的博客地址 文章目录 问题场景:问题分析:问题解决:查看 apiserver 证书支持的 ip 或 host使用 openssl 生成证书:再次查看 apiserver 证书支持的 ip 或 host 再次尝试将 master 加点加入参考 问题场景: k8s 1.28.1 集群后期新增 vip apiserver 证书不支持 vip 引入…

谈谈AI产品经理的产品开发流程

本文以智能文档审阅系统(IDP)和工业互联网数字孪生—故障预测为例,介绍AI产品经理在产品开发全流程过程中,每一阶段的工作内容、工作流程及注意事项,并结合具体案例方便对AI产品经理感兴趣的同学予以了解。文中尽量避免…

cpufreq子系统

cpufreq是linux上负责实现动态调频的关键,这篇笔记总结了linux内核cpufreq子系统的关键实现(Linux 3.18.140)。 概述 借用一张网络上的图片来看cpufreq子系统的整体结构: 用户态接口:cpufreq通过sysfs向用户态暴露接…

添加jdk 11到环境变量的一种方法

添加jdk 11到环境变量的一种方法 1.jdk11可以直接在android studio 中下载, File --> Settings --> Build, Execution, Deployment --> Build Tools --> Gradle 下载jdk 11 ,确认好下载路径 2.jdk11 添加到环境变量添加到环境变量 多个…

java基于ssm的房源管理系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

web前端——clear可以清除浮动产生的影响

clear可以解决高度塌陷的问题&#xff0c;产生的副作用要小 未使用clear之前 <!DOCTYPE html> <head><meta charset"UTF-8"><title>高度塌陷相关学习</title><style>div{font-size:50px;}.box1{width:200px;height:200px;backg…