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乘法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Fontfabric:一款字体与设计的完美结合

一、产品介绍 Fontfabric是一款由国际字体设计公司Fontfabric开发的字体设计软件。它提供了一整套完整的字体设计工具,让用户可以轻松地创建、设计和定制自己的字体。Fontfabric拥有丰富的字体库,包括各种风格和类型,能够满足用户在不同场景…

Android 13.0 SystemUI状态栏居中显示时间和修改时间显示样式

1.概述 在13.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了 效果图如下: 2.SystemUI状态栏居中显…

我的2023年总结:往前看,别回头

2023年已经结束,我借此机会回顾一下我的2023年,同时也为2024年立好flag。 文章目录 2023印象深刻的实战经历技术成长与规划技术分享与交流CSDN博客参加百度apollo技术讨论会 深入学习Redis源码多彩的生活张杰演唱会《漫长的季节》:往前看&am…

日常测试工作中哪些是必须知道的 SQL 语句?

SQL 简介 SQL(Structured Query Language,结构化查询语言)是一套用于管理关系数据库管理系统(RDBMS),基于 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,比较重要的版本是 SQL92…

Redis小计(4)

目录 1.Set和Get操作 2.mset和mget 3.mset,mget,set后加参数的优点 4.incr,incrby,incrbyfloat 1.Set和Get操作 flushall:清除所有k-v键值对。(删库跑路小技巧) set k v[ex | px]:设置超时…

Spring Beans的魔法门:解密多种配置方式【beans 四】

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Spring Beans的魔法门:解密多种配置方式【beans 四】 前言XML配置方式1. 声明和配置Bean:2. 构造函数注入:3. 导入其他配置文件: java注解方式1. 使用Co…

Vue2 - computed 和 method 的原理区别

目录 1,简单对比2,原理的不同1,method 的处理2,computed 的处理实现缓存触发更新 3,触发更新时的问题 1,简单对比 computed 当做属性使用,method 当做方法使用。computed 可以提供 getter 和 s…

spring模块(二)IOC容器之BeanFactory

在Spring中实现控制反转的是IoC容器 (1)IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从…

Spring Boot Admin健康检查引起的Spring Boot服务假死

问题现象 最近在spring boot项目中引入了 spring-boot-starter-actuator 后,测试环境开始出现服务假死的现象, 且这个问题十分怪异,只在多个微服务中的简称A的这个服务中出现,其他服务都没有出现这个问题, 之所以说…

爬取彼案壁纸

代码展现: 具体代码: import requests import re import os filename 壁纸\\ if not os.path.exists(filename): os.mkdir(filename) for i in range(2,11): url fhttp://www.netbian.com/index_{i}.htm headers {User-Agent: …

iOS实时查看App运行日志

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 📝 摘要: 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具,我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

CMake支持的编译平台和IDE

😈「CSDN主页」:传送门 😈「Bilibil首页」:传送门 😈「本文的内容」:CMake入门教程 😈「动动你的小手」:点赞👍收藏⭐️评论📝 文章目录 简介支持的IDEVisual…

vue3 鲜为人知的知识点

该篇文章是个人觉得在平常开发过程中没怎么注意到&#xff08;新增加&#xff09;的知识点&#xff0c;每个章节的内容在官网中不只文章提到的这些。 &#x1f495; 模板语法 ✔ 动态参数 <script setup> import { ref } from vueconst attributeName ref(msg) const …

[JavaWeb玩耍日记] 数据库

mysql版本&#xff1a;5.7.24 使用Navicat for MySQL辅助学习(2015年版)&#xff0c;这个在粘贴本博客的块引用内容时会有额外的不可见内容导致sql运行出问题&#xff0c;不过有影响的地方笔者已排除 目录 一.数据库创建 二.使用数据库与创建表 三.表内列的数据类型 四.修…

解决Android Studio The path ‘X:\XXX‘ does not belong to a directory.

目录 前言 一、问题描述 二、解决方法 前言 在移动应用开发领域&#xff0c;Android Studio作为一款功能强大的集成开发环境&#xff0c;为开发人员提供了丰富的工具和功能。然而&#xff0c;在使用Android Studio的过程中&#xff0c;有时也会遇到各种各样的问题和错误。 &…

SpringCloud微服务

微服务技术对比 DubboSpringCloudSpringCloudAlibaba注册中心zookeeper,RedisEureka、ConsulNacos、Eureka服务远程调用Dubbo协议Feign(http协议)Dubbo、Feign配置中心无SpringCloudConfigSpringCloudConfig,Nacos服务网关无SpringCloudGateway、ZuulSpringCloudGateway、Zuul…

西门子PLC联网数据采集:借助HiWoo Box实现高效监控与管理

在工业自动化领域&#xff0c;西门子PLC作为一种广泛应用的控制器&#xff0c;对于工厂的生产线具有至关重要的作用。如何实现西门子PLC的联网数据采集&#xff0c;提高生产效率和管理水平&#xff0c;成为了许多企业的关注焦点。而HiWoo Box作为一款功能强大的工业网关&#x…

STM32-03-STM32HAL库

文章目录 STM32HAL库1. HAL库介绍2. STM32Cube固件包3. HAL库框架结构4. 新建HAL版本MDK工程 STM32HAL库 1. HAL库介绍 HAL库 HAL&#xff0c;英文全称 Hardware Abstraction Layer&#xff0c;即硬件抽象层。HAL库是ST公司提供的外设驱动代码的驱动库&#xff0c;用户只需要调…

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff…

性能优化-OpenMP概述(一)-宏观全面理解OpenMP

本文旨在从宏观角度来介绍OpenMP的原理、编程模型、以及在各个领域的应用、使用、希望读者能够从本文整体上了解OpenMP。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础…