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

《Pytorch新手入门》第一节-认识Tensor

《Pytorch新手入门》第一节

  • 一、认识Tensor
    • 1.1Tensor定义
    • 1.2Tensor运算操作
    • 1.3Tensor与numpy转换

参考《深度学习框架PyTorch:入门与实践_陈云(著)》

一、认识Tensor

1.1Tensor定义

Tensor 是 PyTorch 中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)一维数组(向量)二维数组(阵)或更高的数组。Tensor 和 numpy的ndarrays类似,但Tensor 可以使用GPU加速。

import torch
# 创建一个5*3的矩阵
x = torch.Tensor(5, 3)

在这里插入图片描述

# 查看Tensor的形状
print(x.size())
# 查看Tensor某一维的大小,两种写法等价
print(x.size()[0], x.size(1))
'''
torch.Size([5, 3])
5 3
'''

torch.size是tuple对象的子类,因此它支持 tuple 的所有操作,如xsize0[0]。

# 使用[0,1]均匀分布随机初始化二维数组
y = torch.rand(5, 3)

在这里插入图片描述

1.2Tensor运算操作

# Tensor加法的三种写法
print(x + y)
print(torch.add(x, y))
print(torch.add(x, y, out=torch.Tensor(5, 3)))

在这里插入图片描述

# 将一个Tensor加到另一个Tensor
print(y.add(x)) #普通加法,不改变y的内容
print(y.add_(x)) # inplace加法,改变y的内容

函数名后面带下划线_的函数会修改 Tensor 本身。例如,x.add_()和x.t_()会改变x,但x.add()和x.t()会返回一个新的 Tensor,而x不变。
Tensor的切片操作与numpy类似,Tensor还支持很多操作,包括数学运算、线性代数、选择、切片等,其接口设计与numpy极为相似。

print(x[:, 1])
'''
tensor([0.0000e+00, 1.0516e-35, 0.0000e+00, 1.0515e-35, 0.0000e+00])
'''

1.3Tensor与numpy转换

Tensor和numpy的数组间的互操作非常容易且快速。Tensor 不支持的操作,可以先转为 numpy 数组处理,之后再转回 Tensor。Tensor 和 numpy 对象共享内存,所以它们之间的转换很快,而且几乎不会消耗资源。

# tensor——》numpy array
a = torch.ones(5)
b = a.numpy()
'''
a tensor([1., 1., 1., 1., 1.])
b [1. 1. 1. 1. 1.]
'''
a.add_(1)
'''
a tensor([2., 2., 2., 2., 2.])
b tensor([2., 2., 2., 2., 2.])
'''
import numpy as np
# numpy array——》tensor
a = np.ones(5)
b = torch.from_numpy(a)

Tensor可通过.cuda方法转为GPU的Tensor,从而享受GPU带来的加速运算。

# 在不支持CUDA的机器下,这一步不会运行
if torch.cuda.is_available():x = x.cuda()y = y.cuda()print(x+y)

相关文章:

  • 如何选一款适合自己的网页浏览器?-2023
  • linux杀毒软件下载、安装(在线安装、离线安装)
  • CentOS Stream9 修改阿里源
  • C++基础算法④——排序算法(快速、归并附完整代码)
  • 【ARM Trace32(劳特巴赫) 使用介绍 2 -- Trace32 cmm 脚本基本语法及常用命令】
  • 理解springboot那些过滤器与调用链、包装或封装、设计模式相关等命名规范,就可以读懂80%的springboot源代码,和其他Java框架代码
  • 在react中使用redux react-redux的使用demo
  • 【c++|opencv】二、灰度变换和空间滤波---1.灰度变换、对数变换、伽马变换
  • 我的创作纪念日1024
  • 国家数据局正式揭牌,数据专业融合型人才迎来发展良机
  • 【咕咕送书 | 第5期】国家数据局正式揭牌,数据专业融合型人才迎来发展良机
  • 39基于matlab的全局路径规划算法中的快速扩展随机树RRT路径规划算法及其改进方法
  • InfoHound:一款针对域名安全的强大OSINT工具
  • Tiny Plane固定翼小飞机机身硬件整理开源
  • Java Web 项目通用基础响应结果类 BaseRespResult
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • Javascripit类型转换比较那点事儿,双等号(==)
  • node入门
  • pdf文件如何在线转换为jpg图片
  • Web设计流程优化:网页效果图设计新思路
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • raise 与 raise ... from 的区别
  • UI设计初学者应该如何入门?
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #pragma multi_compile #pragma shader_feature
  • $.ajax()
  • (2)Java 简介
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)【Hibernate总结系列】使用举例
  • (转载)利用webkit抓取动态网页和链接
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 受管制代码
  • .netcore如何运行环境安装到Linux服务器
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Conditional注解详解
  • @DataRedisTest测试redis从未如此丝滑
  • @RequestMapping 的作用是什么?
  • @SpringBootApplication 包含的三个注解及其含义
  • [ JavaScript ] JSON方法
  • [android] 请求码和结果码的作用
  • [BZOJ1008][HNOI2008]越狱
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [bzoj1912]异象石(set)
  • [BZOJ2208][Jsoi2010]连通数
  • [C++] Windows中字符串函数的种类
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [CF226E]Noble Knight's Path