Tensor基础操作总结
文章目录
- 前言
- 一、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基础操作总结相关推荐
- 深度学习(6)TensorFlow基础操作二: 创建Tensor
深度学习(6)TensorFlow基础操作二: 创建Tensor 一. 创建方式 1. From Numpy,List 2. zeros,ones (1) tf.zeros() (2) tf.zero ...
- Tensorflow:张量(Tensor)的创建及其基础操作
Tensorflow版本:V2.8.0 Tensorflow中所有的运算操作都是基于张量进行的.Tensorflow中的张量Tensor是具有统一类型的多维数组.这篇博文主要介绍张量的创建及基础操 ...
- Tensor基础实践
Tensor基础实践 飞桨(PaddlePaddle,以下简称Paddle)和其他深度学习框架一样,使用Tensor来表示数据,在神经网络中传递的数据均为Tensor. Tensor可以将其理解为多维 ...
- 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战
深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战 1. 导包 2. 加载数据集 3. 转换数据类型 4. 查看x.shape, y.shape, x.dtype, y.dtype ...
- 深度学习(10)TensorFlow基础操作六: 数学运算
深度学习(10)TensorFlow基础操作六: 数学运算 1. Operation type 2. + - * / % // 3. tf.math.log & tf.exp 4. log2, ...
- 深度学习(7)TensorFlow基础操作三: 索引与切片
深度学习(7)TensorFlow基础操作三: 索引与切片 一. 基础索引 1. Basic indexing 2. Numpy-style indexing 3. start : end 4. 切片 ...
- 深度学习(5)TensorFlow基础操作一: TensorFlow数据类型
深度学习(5)TensorFlow基础操作一: TensorFlow数据类型 Data Container(数据载体) What's Tensor TF is a computing lib(科学计算 ...
- Pytorch基础操作 —— 6. 如何使用自定义数据集
文章目录 自定义数据集 Step 1. 熟悉你的数据集 有数据就要有标签 数据大小.维度一定要一样 归一化 Step 2. 确定如何加载你的数据集 使用 DataLoader 批量加载数据 需要注意的 ...
- 《Tensorflow 从基础到实战》01 安装与基础操作、手写数据集、逻辑回归
书山有路勤为径,学海无涯苦作舟 凡我不能创造的,我就不能理解 1. 安装与简介 1.1 安装 在anaconda的promat pip install tensorflow 不能安装的话,外部安装网址 ...
最新文章
- 学点基本功:机器学习常用损失函数小结
- WIRW:淡水分子微生物生态学综述
- java 重复start,iText中带有“start”属性的有序列表[重复]
- 杠上Spark、Flink?Kafka为何转型流数据平台
- 小米副总裁崔宝秋:智能手机是今天AI技术最大的平台,AIoT又让AI无处不在 | MEET 2021...
- x264编码参数大测试:10 trellis(1000Kbps)
- 12套经典java实战教程下载链接
- H5开发中常用的js方法
- break lab c语言,C语言printf详解
- zk4android,zk4 复刻实战有感
- python安卓app下载_【Python教学视频手机下载】Python教学app下载 v1.0 安卓版-趣致软件园...
- zblog php的foot模板在那里,zblog主题模板修改教程 zblog模板怎么修改?
- Java整型变量举例_java 整型常量和整型变量的问题
- 数独问题流程图_数独游戏的难度等级分析及求解算法研究
- AR技术与VR技术有什么区别呢?
- Windows网络活跃点决定使用的优先权
- 【分析】CPU hotplug时进程上下文切换流程分析
- iOS图案解锁(九宫格)
- C语言实现网络聊天室 socket的简单应用
- 大小写字母的相互转换 C语言