文章目录

  • 前言
  • 一、tensor是什么?
  • 二、tensor的基本操作
    • 1.tensor的创建
    • 2.基础操作
    • 3.索引与切片
    • 4.广播机制
    • 5.tensor和numpy的互相转换
    • 6.在GPU上使用tensor
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

本文记录一下,小白学习pytorch的过程。这次文章是第一次学习记录,内容是tensor的基本数据处理和计算操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、tensor是什么?

在深度学习中,我们通常会频繁地对数据进行操作。而在PyTorch中,torch.Tensor是存储和变换数据的主要工具。Tensor和NumPy的多维数组非常类似。
然而,Tensor提供了GPU计算和自动求梯度等更多功能,这些使Tensor更加适合深度学习。
"tensor"这个单词一般可译作“张量”,张量可以看作是一个多维数组。标量可以看作是0维张量,向量可以看作1维张量,矩阵可以看作是2维张量。

二、tensor的基本操作

1.tensor的创建

代码如下(示例):

import torch
#创建一个未初始化的tensor
x = torch.empty(2,3)
#初始化一个随机的tensor
x = torch.rand(2,3)
#初始化一个long型全0的tensor
x = torch.zeros(2,3,dtype=torch.long)
#初始化一个确定好数值的tensor
x = torch.tensor([[5,5,2],[1,2,3]])
#默认具有相同的dtype和device
x = x.new_ones(2,3,dtype=torch.float6)
#指定新的tensor y 具有和x一样的形状
y = torch.randn_like(x,dtype=torch.float)
#获取tensor的形状
x.shape
x.size()

其他创建tensor的函数:

2.基础操作

a = torch.tensor([[5,5,2],[1,2,3]])
b = torch.tensor([[5,5,2],[1,2,3]])
#1.加法
(a + b)
(torch.add(a,b))
#2.减法
(a - b)
#3.除法
(a / b)
#4.乘法(列数必须统一)
a*b
#5.改变形状
y = x.view(6)
z = x.view(-1, 2)  # -1所指的维度可以根据其他维度的值推出来
print(x.size(), y.size(), z.size())#torch.Size([2, 3]) torch.Size([6]) torch.Size([3, 2])
#6.共享内存空间
x += 1
print(x)
print(y) # y也加了1#tensor([[2.0910, 2.5265, 2.3833],[1.4564, 1.3117, 1.5181]])#tensor([2.0910, 2.5265, 2.3833, 1.4564, 1.3117, 1.5181])#view()返回的新Tensor与源Tensor虽然可能有不同的size,但是是共享data的,
也即更改其中的一个,另外一个也会跟着改变。
#7.矩阵乘法
a = torch.ones(2,2) * 3
b = torch.ones(2,2)
#三种表达方式
torch.mm(a,b)    # 只适用于2维
torch.matmul(a,b)
troch.mul(a,b)
a@b#tensor([[6., 6.],[6., 6.]])
#8.unsqueeze 删除纬度
a = torch.tensor([1.2,2.3])
a       # tensor([1.2000, 2.3000])
a.shape
# torch.Size([2])
a.unsqueeze(-1) # tensor([[1.2000],[2.3000]])  shape 是torch.Size([2, 1])
a.unsqueeze(0)  # tensor([[1.2000, 2.3000]])   shape 是torch.Size([1, 2])
b = torch.rand(32)
f = torch.rand(4,32,14,14)
b = b.unsqueeze(1).unsqueeze(2).unsqueeze(0)
b.shape # torch.Size([1, 32, 1, 1])
#9.squeeze 增加纬度
b = torch.rand(32)
b = b.unsqueeze(1).unsqueeze(2).unsqueeze(0)
b.shape # torch.Size([1, 32, 1, 1])
# 若不填写参数,则把维度shape是1的都给删除掉
# 只能删除维度shape是1的那些维度
b.squeeze().shape # torch.Size([32])
b.squeeze(0).shape # torch.Size([32, 1, 1])

3.索引与切片

# 4张3通道28*28的图片
a = torch.rand(4,3,28,28)
a[0].shape     # torch.Size([3, 28, 28])
a[0,0].shape   # torch.Size([28, 28])
a[0,0,2,4]     # tensor(0.9831) 标量
# 4张3通道28*28的图片
a = torch.rand(4,3,28,28)
a.shape             # torch.Size([4, 3, 28, 28])
a[:2].shape         # torch.Size([2, 3, 28, 28])
a[:2,:1,:,:].shape  # torch.Size([2, 1, 28, 28])
a[:2,1:,:,:].shape  # torch.Size([2, 2, 28, 28])
a[:2,-1:,:,:].shape # torch.Size([2, 1, 28, 28])
a[:,:,0:28:2,0:28:2].shape  # torch.Size([4, 3, 14, 14])
a[:,:,::2,::2].shape        # torch.Size([4, 3, 14, 14])
————————————————
版权声明:本文为CSDN博主「错错莫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bit452/article/details/115278139

4.广播机制

当我们对两个形状不同的Tensor按元素运算时,可能会触发广播(broadcasting)机制:先适当复制元素使这两个Tensor形状相同后再按元素运算。例如

x = torch.arange(1, 3).view(1, 2)
print(x)
y = torch.arange(1, 4).view(3, 1)
print(y)
print(x + y)#tensor([[1, 2]]) #tensor([[1], [2], [3]]) #tensor([[2, 3], [3, 4], [4, 5]])

5.tensor和numpy的互相转换

我们可以使用numpy()和from_numpy()将Tensor和NumPy中的数组相互转换。但是需要注意的一点是: 这两个函数所产生的的Tensor和NumPy中的数组共享相同的内存(所以他们之间的转换很快),改变其中一个时另一个也会改变!
还有一个常用的将NumPy中的array转换成Tensor的方法就是torch.tensor(), 需要注意的是,此方法总是会进行数据拷贝(就会消耗更多的时间和空间),所以返回的Tensor和原来的数据不再共享内存。

#np转tensor
a = np.ones(3)
b = torch.from_numpy(a)
print(a, b)
a += 1
print(a, b)
b += 1
print(a, b)#[1. 1. 1.] tensor([1., 1., 1.], dtype=torch.float64) #[2. 2. 2.] tensor([2., 2., 2.], dtype=torch.float64) #[3. 3. 3.] tensor([3., 3., 3.], dtype=torch.float64)
#使用torch.tensor()将NumPy数组转换成Tensor(不再共享内存)
c = torch.tensor(a)
a += 1
print(a, c)
[4. 4. 4.] tensor([3., 3., 3.], dtype=torch.float64)
#tensor转np
a = torch.ones(5)
b = a.numpy()

6.在GPU上使用tensor

用方法to()可以将Tensor在CPU和GPU(需要硬件支持)之间相互移动。

# 以下代码只有在PyTorch GPU版本上才会执行
if torch.cuda.is_available():device = torch.device("cuda")          # GPUy = torch.ones_like(x, device=device)  # 直接创建一个在GPU上的Tensorx = x.to(device)                       # 等价于 .to("cuda")z = x + yprint(z)print(z.to("cpu", torch.double))       # to()还可以同时更改数据类型#tensor([[2, 3]], device='cuda:0’) #tensor([[2., 3.]], dtype=torch.float64)

总结

以上就是今天要讲的内容,本文简单介绍了tensor的一些基础使用方法。

Tensor基础操作总结相关推荐

  1. 深度学习(6)TensorFlow基础操作二: 创建Tensor

    深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...

  2. Tensorflow:张量(Tensor)的创建及其基础操作

    Tensorflow版本:V2.8.0   Tensorflow中所有的运算操作都是基于张量进行的.Tensorflow中的张量Tensor是具有统一类型的多维数组.这篇博文主要介绍张量的创建及基础操 ...

  3. Tensor基础实践

    Tensor基础实践 飞桨(PaddlePaddle,以下简称Paddle)和其他深度学习框架一样,使用Tensor来表示数据,在神经网络中传递的数据均为Tensor. Tensor可以将其理解为多维 ...

  4. 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战

    深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战 1. 导包 2. 加载数据集 3. 转换数据类型 4. 查看x.shape, y.shape, x.dtype, y.dtype ...

  5. 深度学习(10)TensorFlow基础操作六: 数学运算

    深度学习(10)TensorFlow基础操作六: 数学运算 1. Operation type 2. + - * / % // 3. tf.math.log & tf.exp 4. log2, ...

  6. 深度学习(7)TensorFlow基础操作三: 索引与切片

    深度学习(7)TensorFlow基础操作三: 索引与切片 一. 基础索引 1. Basic indexing 2. Numpy-style indexing 3. start : end 4. 切片 ...

  7. 深度学习(5)TensorFlow基础操作一: TensorFlow数据类型

    深度学习(5)TensorFlow基础操作一: TensorFlow数据类型 Data Container(数据载体) What's Tensor TF is a computing lib(科学计算 ...

  8. Pytorch基础操作 —— 6. 如何使用自定义数据集

    文章目录 自定义数据集 Step 1. 熟悉你的数据集 有数据就要有标签 数据大小.维度一定要一样 归一化 Step 2. 确定如何加载你的数据集 使用 DataLoader 批量加载数据 需要注意的 ...

  9. 《Tensorflow 从基础到实战》01 安装与基础操作、手写数据集、逻辑回归

    书山有路勤为径,学海无涯苦作舟 凡我不能创造的,我就不能理解 1. 安装与简介 1.1 安装 在anaconda的promat pip install tensorflow 不能安装的话,外部安装网址 ...

最新文章

  1. 学点基本功:机器学习常用损失函数小结
  2. WIRW:淡水分子微生物生态学综述
  3. java 重复start,iText中带有“start”属性的有序列表[重复]
  4. 杠上Spark、Flink?Kafka为何转型流数据平台
  5. 小米副总裁崔宝秋:智能手机是今天AI技术最大的平台,AIoT又让AI无处不在 | MEET 2021...
  6. x264编码参数大测试:10 trellis(1000Kbps)
  7. 12套经典java实战教程下载链接
  8. H5开发中常用的js方法
  9. break lab c语言,C语言printf详解
  10. zk4android,zk4 复刻实战有感
  11. python安卓app下载_【Python教学视频手机下载】Python教学app下载 v1.0 安卓版-趣致软件园...
  12. zblog php的foot模板在那里,zblog主题模板修改教程 zblog模板怎么修改?
  13. Java整型变量举例_java 整型常量和整型变量的问题
  14. 数独问题流程图_数独游戏的难度等级分析及求解算法研究
  15. AR技术与VR技术有什么区别呢?
  16. Windows网络活跃点决定使用的优先权
  17. 【分析】CPU hotplug时进程上下文切换流程分析
  18. iOS图案解锁(九宫格)
  19. C语言实现网络聊天室 socket的简单应用
  20. 大小写字母的相互转换 C语言

热门文章

  1. 英雄联盟里,为什么要打一下,走一下
  2. 工作中要怎么与同事相处呢?
  3. 未来的智能制造,或许会往这些方向推进
  4. Python中如何将浮点型数据转换成整型
  5. 虚拟机如何支持硬件虚拟化
  6. 阿里云备案流程、操作步骤及所需时间图文详解
  7. 安全狗获聘福建省网络与信息安全信息通报中心技术支撑单位
  8. python 习题练习一
  9. 思维方式-《知识的边界》书中的精髓:互联网对知识的影响以及利用互联网获得更多知识的方法。
  10. IT技术人员的六大方向