返回顶部
首页 > 资讯 > 精选 >pytorch中stack和cat的及to_tensor的示例分析
  • 651
分享到

pytorch中stack和cat的及to_tensor的示例分析

2023-06-15 04:06:01 651人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关PyTorch中stack和cat的及to_tensor的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。初入计算机视觉遇到的一些坑1.pytorch中转tensorx=np.ra

这篇文章给大家分享的是有关PyTorch中stack和cat的及to_tensor的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

初入计算机视觉遇到的一些坑

1.pytorch中转tensor

x=np.random.randint(10,100,(10,10,10))x=TF.to_tensor(x)print(x)

这个函数会对输入数据进行自动归一化,比如有时候我们需要将0-255的图片转为numpy类型的数据,则会自动转为0-1之间

2.stack和cat之间的差别

stack

x=torch.randn((1,2,3))y=torch.randn((1,2,3))z=torch.stack((x,y))#默认dim=0print(z.shape)#torch.Size([2, 1, 2, 3])

所以stack的之后的数据也就很好理解了,z[0,...]的数据是x,z[1,...]的数据是y。

cat

z=torch.cat((x,y))print(z.size())#torch.Size([2, 2, 3])

cat之后的数据 z[0,:,:]是x的值,z[1,:,:]是y的值。

其中最关键的是stack之后的数据的size会多出一个维度,而cat则不会,有一个很简单的例子来说明一下,比如要训练一个检测模型,label是一些标记点,eg:[x1,y1,x2,y2]

送入网络的加上batchsize则时Size:[batchsize,4],如果我已经有了两堆数据,data1:Size[128,4],data2:Size[128,4],需要将这两个数据合在一起的话目标data:Size[256,4]。

显然我们要做的是:torch.cat((data1,data2))

如果我们的数据是这样:有100个label,每一个label被放进一个list(data)中,[[x1,y1,x2,y2],[x1,y1,x2,y2],...]其中data是一个list长度为100,而list中每一个元素是张图片的标签,size为[4]我们需要将他们合一起成为一Size:[100,4]的的数据。

显然我们要做的是torch.stack(data)。而且torch.stack的输入参数为list类型!

补充:pytorch中的cat、stack、tranpose、permute、unsqeeze

pytorch中提供了对tensor常用的变换操作。

cat 连接

对数据沿着某一维度进行拼接。cat后数据的总维数不变。

比如下面代码对两个2维tensor(分别为2*3,1*3)进行拼接,拼接完后变为3*3还是2维的tensor。

代码如下:

import torchtorch.manual_seed(1)x = torch.randn(2,3)y = torch.randn(1,3)print(x,y)

结果:

0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]

-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 1x3]

将两个tensor拼在一起:

torch.cat((x,y),0)

结果:

0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 3x3]

更灵活的拼法:

torch.manual_seed(1)x = torch.randn(2,3)print(x)print(torch.cat((x,x),0))print(torch.cat((x,x),1))

结果

// x
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]

// torch.cat((x,x),0)
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 4x3]

// torch.cat((x,x),1)
0.6614 0.2669 0.0617 0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661 0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x6]

stack,增加新的维度进行堆叠

而stack则会增加新的维度。

如对两个1*2维的tensor在第0个维度上stack,则会变为2*1*2的tensor;在第1个维度上stack,则会变为1*2*2的tensor。

见代码:

a = torch.ones([1,2])b = torch.ones([1,2])c= torch.stack([a,b],0) // 第0个维度stack

输出:

(0 ,.,.) =
1 1

(1 ,.,.) =
1 1
[torch.FloatTensor of size 2x1x2]

c= torch.stack([a,b],1) // 第1个维度stack

输出:


(0 ,.,.) =

1 1

1 1

[torch.FloatTensor of size 1x2x2]

transpose ,两个维度互换

代码如下:

torch.manual_seed(1)x = torch.randn(2,3)print(x)

原来x的结果:

0.6614 0.2669 0.0617

0.6213 -0.4519 -0.1661

[torch.FloatTensor of size 2x3]

将x的维度互换

x.transpose(0,1)

结果

0.6614 0.6213

0.2669 -0.4519

0.0617 -0.1661

[torch.FloatTensor of size 3x2]

permute,多个维度互换,更灵活的transpose

permute是更灵活的transpose,可以灵活的对原数据的维度进行调换,而数据本身不变。

代码如下:

x = torch.randn(2,3,4)print(x.size())x_p = x.permute(1,0,2) # 将原来第1维变为0维,同理,0→1,2→2print(x_p.size())

结果:

torch.Size([2, 3, 4])

torch.Size([3, 2, 4])

squeeze 和 unsqueeze

常用来增加或减少维度,如没有batch维度时,增加batch维度为1。

squeeze(dim_n)压缩,减少dim_n维度 ,即去掉元素数量为1的dim_n维度。

unsqueeze(dim_n),增加dim_n维度,元素数量为1。

上代码:

# 定义张量import torchb = torch.Tensor(2,1)b.shapeOut[28]: torch.Size([2, 1])# 不加参数,去掉所有为元素个数为1的维度b_ = b.squeeze()b_.shapeOut[30]: torch.Size([2])# 加上参数,去掉第一维的元素为1,不起作用,因为第一维有2个元素b_ = b.squeeze(0)b_.shape Out[32]: torch.Size([2, 1])# 这样就可以了b_ = b.squeeze(1)b_.shapeOut[34]: torch.Size([2])# 增加一个维度b_ = b.unsqueeze(2)b_.shapeOut[36]: torch.Size([2, 1, 1])

pytorch的优点

1.PyTorch是相当简洁且高效快速的框架;2.设计追求最少的封装;3.设计符合人类思维,它让用户尽可能地专注于实现自己的想法;4.与Google的Tensorflow类似,FaiR的支持足以确保PyTorch获得持续的开发更新;5.PyTorch作者亲自维护的论坛 供用户交流和求教问题6.入门简单

感谢各位的阅读!关于“pytorch中stack和cat的及to_tensor的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: pytorch中stack和cat的及to_tensor的示例分析

本文链接: https://lsjlt.com/news/277368.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • pytorch中stack和cat的及to_tensor的示例分析
    这篇文章给大家分享的是有关pytorch中stack和cat的及to_tensor的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。初入计算机视觉遇到的一些坑1.pytorch中转tensorx=np.ra...
    99+
    2023-06-15
  • 浅谈pytorch中stack和cat的及to_tensor的坑
    初入计算机视觉遇到的一些坑 1.pytorch中转tensor x=np.random.randint(10,100,(10,10,10)) x=TF.to_tensor(x) ...
    99+
    2024-04-02
  • Java中Stack与Queue的示例分析
    这篇文章给大家分享的是有关Java中Stack与Queue的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮...
    99+
    2023-06-15
  • PyTorch dataloader中shuffle=True的示例分析
    小编给大家分享一下PyTorch dataloader中shuffle=True的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!对shuffle=True...
    99+
    2023-06-15
  • PyTorch中inplace字段的示例分析
    小编给大家分享一下PyTorch中inplace字段的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!例如torch.nn.ReLU(inplace=Tru...
    99+
    2023-06-15
  • Java反射之Call stack introspection的示例分析
    小编给大家分享一下Java反射之Call stack introspection的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!java是基于栈设计的语言,其实与C、C++语言相同。整个程序的运行表现在方法的执行是...
    99+
    2023-05-30
    java introspection
  • pytorch中LN(LayerNorm)及Relu和其变相输出操作的示例分析
    这篇文章主要介绍pytorch中LN(LayerNorm)及Relu和其变相输出操作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!主要就是了解一下pytorch中的使用layernorm这种归一化之后的数据...
    99+
    2023-06-15
  • Pytorch数据集分割及动量示例分析
    今天就跟大家聊聊有关Pytorch数据集分割及动量示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.数据集分割通过datasets可以直接分别获取训练集和测试集。通常我们会将...
    99+
    2023-06-25
  • Pytorch中Dataset数据处理的示例分析
    这篇文章给大家分享的是有关Pytorch中Dataset数据处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Pytorch系列是了解与使用Pytorch编程来实现卷积神经网络。学习如何对卷积神经网络编...
    99+
    2023-06-22
  • Pytorch中Tensor基本操作的示例分析
    这篇文章将为大家详细讲解有关Pytorch中Tensor基本操作的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、tensor的创建1.使用tensor小写字母的tensor接收具体的数据,可以...
    99+
    2023-06-25
  • python中pytorch图像识别的示例分析
    这篇文章将为大家详细讲解有关python中pytorch图像识别的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、数据集爬取现在的深度学习对数据集量的需求越来越大了,也有了许多现成的数据集可供大...
    99+
    2023-06-29
  • pytorch Dropout过拟合的示例分析
    这篇文章主要介绍pytorch Dropout过拟合的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如下所示:import torchfrom torch.autograd&nb...
    99+
    2023-06-15
  • Pytorch进阶操作的示例分析
    小编给大家分享一下Pytorch进阶操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、合并与分割1.cat拼接直接按照指定的dim维度进行合并,要求...
    99+
    2023-06-25
  • pytorch中优化器optimizer.param_groups用法的示例分析
    小编给大家分享一下pytorch中优化器optimizer.param_groups用法的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!optimizer.param_groups: 是长度为2的list,其中的元...
    99+
    2023-06-15
  • pytorch 6中batch_train批训练操作的示例分析
    这篇文章主要介绍pytorch 6中batch_train批训练操作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!看代码吧~import torchimport torch.utils....
    99+
    2023-06-15
  • c++中的stack和dequeue解析
    目录stack介绍stack的定义stack的数据插入stack中数据的个数stack数据删除stack中数据的查看判断stack对象是否为空stack对象的数据交换queue的介绍...
    99+
    2023-05-18
    c++ stack和dequeue c++ stack
  • Javascript中 “&” 和 “|” 的示例分析
    这篇文章主要为大家展示了“Javascript中 “&” 和 “|” 的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Javascript中 “...
    99+
    2024-04-02
  • Pytorch梯度下降优化的示例分析
    这篇文章主要介绍了Pytorch梯度下降优化的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、激活函数1.Sigmoid函数函数图像以及表达式如下:通过该函数,可以...
    99+
    2023-06-25
  • Pytorch张量数据类型的示例分析
    Pytorch张量数据类型的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.python 和 pytorch的数据类型区别在PyTorch中无法展示字符串,因此表达字...
    99+
    2023-06-25
  • Pytorch中关于model.eval()的作用及分析
    目录model.eval()的作用及分析结论Pytorch踩坑之model.eval()问题比较常见的有两方面的原因1) data2)model.state_dict()model....
    99+
    2023-02-03
    Pytorch model.eval model.eval的作用 model.eval()
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作