当前位置:首页 > 编程教程 > Python技术文章 > pytorch 调整某一维度数据顺序的方法

详解pytorch 调整某一维度数据顺序

  • 发布时间:
  • 作者:码农之家
  • 点击:54

这篇文章主要知识点是关于pytorch、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python网络爬虫实战
  • 类型:Python爬虫大小:51MB格式:PDF作者:胡松涛
立即下载

pytorch 调整某一维度数据顺序的方法

在pytorch中,Tensor是以引用的形式存在的,故而并不能直接像python交换数据那样

a = torch.Tensor(3,4)
a[0],a[1] = a[1],a[0]

# 这会导致a的结果为a=(a[1],a[1],a[2])
# 而非预期的(a[1],a[0],a[2])

这是因为引用赋值导致的,在交换过程,如下所示,当b的值赋值与a的时候,因为tmp指针与a是同一变量的不同名,故而tmp的内容也会变为b。

# 交换a,b
a,b = b,a
# 等价于
tmp = a
a = b #此时,tmp = a= b
b = tmp

故而在我们通过另外一种方式来对其进行交换,通过对下标索引的方式,对其进行交换

a = torch.Tensor(3,4)
index = [1,0,2]
a = a[index]

以上这篇pytorch 调整某一维度数据顺序的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

Python 相关电子书
学习笔记
网友NO.217016

解决pytorch GPU 计算过程中出现内存耗尽的问题

Pytorch GPU运算过程中会出现:“cuda runtime error(2): out of memory”这样的错误。通常,这种错误是由于在循环中使用全局变量当做累加器,且累加梯度信息的缘故,用官方的说法就是:"accumulate history across your training loop"。在默认情况下,开启梯度计算的Tensor变量是会在GPU保持他的历史数据的,所以在编程或者调试过程中应该尽力避免在循环中累加梯度信息。 下面举个栗子: 上代码: total_loss=0for i in range(10000): optimizer.zero_grad() output=model(input) loss=criterion(output) loss.backward() optimizer.step() total_loss+=loss #这里total_loss是跨越循环的变量,起着累加的作用, #loss变量是带有梯度的tensor,会保持历史梯度信息,在循环过程中会不断积累梯度信息到tota_loss,占用内存 以上例子的修正方法是在循环中的最后一句修改为:total_loss+=float(loss),利用类型变换解除梯度信息,这样……

网友NO.984239

python PyTorch预训练示例

前言 最近使用PyTorch感觉妙不可言,有种当初使用Keras的快感,而且速度还不慢。各种设计直接简洁,方便研究,比tensorflow的臃肿好多了。今天让我们来谈谈PyTorch的预训练,主要是自己写代码的经验以及论坛PyTorch Forums上的一些回答的总结整理。 直接加载预训练模型 如果我们使用的模型和原模型完全一样,那么我们可以直接加载别人训练好的模型: my_resnet = MyResNet(*args, **kwargs)my_resnet.load_state_dict(torch.load("my_resnet.pth")) 当然这样的加载方法是基于PyTorch推荐的存储模型的方法: torch.save(my_resnet.state_dict(), "my_resnet.pth") 还有第二种加载方法: my_resnet = torch.load("my_resnet.pth") 加载部分预训练模型 其实大多数时候我们需要根据我们的任务调节我们的模型,所以很难保证模型和公开的模型完全一样,但是预训练模型的参数确实有助于提高训练的准确率,为了结合……

网友NO.723946

pytorch多进程加速及代码优化方法

目标: 优化代码,利用多进程,进行近实时 预处理、网络预测及后处理: 本人尝试了pytorch的multiprocessing,进行多进程同步处理以上任务。 from torch.multiprocessing import Pool,Manager 为了进行各进程间的通信,使用Queue,作为数据传输载体。 manager = Manager() input_queue = manager.Queue() output_queue = manager.Queue() show_queue = manager.Queue() 即将预处理进程处理后的图像放进 input_queue,而网络预测进程实时获取 input_queue队列中的数据,一旦放入,就从中取出,输入网络: while 1: input = input_queue.get() 同理,将网络输出放入output_queue,再由后处理进程实时获取并进行后处理,处理后,放入show_queue 从而实现了多进程同步进行预处理、网络预测及后处理,加速了网络实时预测的表现。 问题及解决方案: 1. pytorch cuda报错,re-initialization报错问题: 习惯了在一开始将模型先加载进来……

网友NO.362065

PyTorch的深度学习入门教程之构建神经网络

前言 本文参考PyTorch官网的教程,分为五个基本模块来介绍PyTorch。为了避免文章过长,这五个模块分别在五篇博文中介绍。 Part3:使用PyTorch构建一个神经网络 神经网络可以使用touch.nn来构建。nn依赖于autograd来定义模型,并且对其求导。一个nn.Module包含网络的层(layers),同时forward(input)可以返回output。 这是一个简单的前馈网络。它接受输入,然后一层一层向前传播,最后输出一个结果。 训练神经网络的典型步骤如下: (1) 定义神经网络,该网络包含一些可以学习的参数(如权重) (2) 在输入数据集上进行迭代 (3) 使用网络对输入数据进行处理 (4) 计算loss(输出值距离正确值有多远) (5) 将梯度反向传播到网络参数中 (6) 更新网络的权重,使用简单的更新法则:weight = weight - learning_rate* gradient,即:新的权重=旧的权重-学习率*梯度值。……

<
1
>

Copyright 2018-2020 www.xz577.com 码农之家

版权投诉 / 书籍推广 / 赞助:520161757@qq.com

idea注册码