Pytorch to(device)用法

如下所示:

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.to(device)

这两行代码放在读取数据之前。

mytensor = my_tensor.to(device)

这行代码的意思是将所有最开始读取数据时的tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行。

这句话需要写的次数等于需要保存GPU上的tensor变量的个数;一般情况下这些tensor变量都是最开始读数据时的tensor变量,后面衍生的变量自然也都在GPU上

如果是多个GPU

在代码中的使用方法为:

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

model = Model()

if torch.cuda.device_count() > 1:

 model = nn.DataParallel(model,device_ids=[0,1,2])

model.to(device)

Tensor总结

(1)Tensor 和 Numpy都是矩阵,区别是前者可以在GPU上运行,后者只能在CPU上;

(2)Tensor和Numpy互相转化很方便,类型也比较兼容

(3)Tensor可以直接通过print显示数据类型,而Numpy不可以

把Tensor放到GPU上运行

if torch.cuda.is_available():
 h = g.cuda()
 print(h)
torch.nn.functional
Convolution函数
torch.nn.functional.vonv1d(input,weight,bias=None,stride=1,padding=0,dilation=1,groups=1)

torch.nn.functional.conv2d(input,weight,bias=None,stride=1,padding=0,dilation=1,group=1)

parameter:
 input --输入张量(minibatch * in_channels * iH * iW)-weights-– 过滤器张量 (out_channels, in_channels/groups, kH, kW) - bias – 可选偏置张量 (out_channels) - stride – 卷积核的步长,可以是单个数字或一个元组 (sh x sw)。默认为1 - padding – 输入上隐含零填充。可以是单个数字或元组。 默认值:0 - groups – 将输入分成组,in_channels应该被组数除尽

>>> # With square kernels and equal stride
>>> filters = autograd.Variable(torch.randn(8,4,3,3))
>>> inputs = autograd.Variable(torch.randn(1,4,5,5))
>>> F.conv2d(inputs, filters, padding=1)

Pytorch中使用指定的GPU

(1)直接终端中设定

CUDA_VISIBLE_DEVICES=1

(2)python代码中设定:

import os

os.environ['CUDA_VISIBLE_DEVICE']='1'

(3)使用函数set_device

import torch

torch.cuda.set_device(id)

Pytoch中的in-place

in-place operation 在 pytorch中是指改变一个tensor的值的时候,不经过复制操作,而是在运来的内存上改变它的值。可以把它称为原地操作符。

在pytorch中经常加后缀 “_” 来代表原地in-place operation, 比如 .add_() 或者.scatter()

python 中里面的 += *= 也是in-place operation。

下面是正常的加操作,执行结束加操作之后x的值没有发生变化:

import torch
x=torch.rand(2) #tensor([0.8284, 0.5539])
print(x)
y=torch.rand(2)
print(x+y)  #tensor([1.0250, 0.7891])
print(x)  #tensor([0.8284, 0.5539])

下面是原地操作,执行之后改变了原来变量的值:

import torch
x=torch.rand(2) #tensor([0.8284, 0.5539])
print(x)
y=torch.rand(2)
x.add_(y)
print(x)  #tensor([1.1610, 1.3789])

以上这篇Pytorch to(device)用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • pytorch: tensor类型的构建与相互转换实例

    Summary 主要包括以下三种途径: 使用独立的函数: 使用torch.type()函数: 使用type_as(tesnor)将张量转换为给定类型的张量. 使用独立函数 import torch tensor = torch.randn(3, 5) print(tensor) # torch.long() 将tensor投射为long类型 long_tensor = tensor.long() print(long_tensor) # torch.half()将tensor投射为半精度浮点类型

  • torch 中各种图像格式转换的实现方法

    PIL:使用python自带图像处理库读取出来的图片格式 numpy:使用python-opencv库读取出来的图片格式 tensor:pytorch中训练时所采取的向量格式(当然也可以说图片) PIL与Tensor相互转换 import torch from PIL import Image import matplotlib.pyplot as plt # loader使用torchvision中自带的transforms函数 loader = transforms.Compose([ tr

  • pytorch使用 to 进行类型转换方式

    在程序中,有多种方法进行强制类型转换. 本博文将介绍一个非常常用的方法:to()方法. 我们通常使用它来进行GPU和CPU的类型转换,但其实也可以用来进行torch的dtype转换. 常见方法:tensor.to('cuda:0') 先看官网介绍: **Performs Tensor dtype and/or device conversion. A torch.dtype and torch.device are inferred from the arguments of self.to(*

  • pytorch中tensor张量数据类型的转化方式

    1.tensor张量与numpy相互转换 tensor ----->numpy import torch a=torch.ones([2,5]) tensor([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]]) # ********************************** b=a.numpy() array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]], dtype=float32) numpy --

  • Pyorch之numpy与torch之间相互转换方式

    numpy中的ndarray转化成pytorch中的tensor : torch.from_numpy() pytorch中的tensor转化成numpy中的ndarray : numpy() 代码 import numpy as np import torch np_arr = np.array([1,2,3,4]) tor_arr=torch.from_numpy(np_arr) tor2numpy=tor_arr.numpy() print('\nnumpy\n',np_arr,'\nto

  • pytorch numpy list类型之间的相互转换实例

    如下所示: import torch from torch.autograd import Variable import numpy as np ''' pytorch中Variable与torch.Tensor类型的相互转换 ''' # 1.torch.Tensor转换成Variablea=torch.randn((5,3)) b=Variable(a) print('a',a.type(),a.shape) print('b',type(b),b.shape) # 2.Variable转换

  • Pytorch to(device)用法

    如下所示: device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model.to(device) 这两行代码放在读取数据之前. mytensor = my_tensor.to(device) 这行代码的意思是将所有最开始读取数据时的tensor变量copy一份到device所指定的GPU上去,之后的运算都在GPU上进行. 这句话需要写的次数等于需要保存GPU上的tensor变

  • PyTorch device与cuda.device用法

    1 查看当前的device 输入情况: import torch print("Default Device : {}".format(torch.Tensor([4, 5, 6]).device)) 输出情况: Default Device : cpu 2 cpu设备可以使用“cpu:0”来指定 输入情况 device = torch.Tensor([1, 2, 3], device="cpu:0").device print("Device Type:

  • PyTorch device与cuda.device用法介绍

    目录 1 查看当前的device 2 cpu设备可以使用“cpu:0”来指定 3 gpu设备可以使用“cuda:0”来指定 4 查询CPU和GPU设备数量 5 从CPU设备上转换到GPU设备 5.1 torch.Tensor方法默认使用CPU设备 5.2 使用to方法将cpu的Tensor转换到GPU设备上 5.3 使用.cuda方法将cpu的Tensor转换到GPU设备上 1 查看当前的device 输入情况: import torch print("Default Device : {}&q

  • pytorch plt.savefig()的用法及保存路径

    目录 Pytorch中保存图片的方式 plt.savefig 总结 图像有时候比数据更能满足人们的视觉需求 Pytorch中保存图片的方式 pytorch下保存图像有很多种方法,但是这些基本上都是基于图像处理的,将图像的像素指定一定的维度 ,方法如下: 1.tensor直接保存 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import torch from torchvision import utils as vutils def save_ima

  • pytorch中Tensor.to(device)和model.to(device)的区别及说明

    目录 Tensor.to(device)和model.to(device)的区别 区别所在 举例 pytorch学习笔记--to(device)用法 这段代码到底有什么用呢? 为什么要在GPU上做运算呢? .cuda()和.to(device)的效果一样吗?为什么后者更好? 如果你有多个GPU Tensor.to(device)和model.to(device)的区别 区别所在 使用GPU训练的时候,需要将Module对象和Tensor类型的数据送入到device.通常会使用 to.(devic

  • pytorch中的dataset用法详解

    目录 1.torch.utils.data 里面的dataset使用方法 2.torchvision.datasets的使用方法 用法1:使用官方数据集 用法2:ImageFolder通用的自己数据集加载器 1.torch.utils.data 里面的dataset使用方法 当我们继承了一个 Dataset类之后,我们需要重写 len 方法,该方法提供了dataset的大小: getitem 方法, 该方法支持从 0 到 len(self)的索引 from torch.utils.data im

  • PyTorch中permute的基本用法示例

    目录 permute(dims) 附:permute(多维数组,[维数的组合]) 总结 permute(dims) 将tensor的维度换位. 参数:参数是一系列的整数,代表原来张量的维度.比如三维就有0,1,2这些dimension. 例: import torch import numpy    as np a=np.array([[[1,2,3],[4,5,6]]]) unpermuted=torch.tensor(a) print(unpermuted.size())  #  -->  

  • pytorch中permute()函数用法补充说明(矩阵维度变化过程)

    目录 一.前言 二.举例解释 1.permute(0,1,2) 2.permute(0,1,2) ⇒ permute(0,2,1) 3.permute(0,2,1) ⇒ permute(1,0,2) 4.permute(1,0,2) ⇒ permute(0,2,1) 三.写在最后 一.前言 之前写了篇torch中permute()函数用法文章,在详细的说一下permute函数里维度变化的详细过程 非常感谢@m0_46225327对本文案例更加细节补充 注意: 本文是这篇torch中permute

  • pytorch中permute()函数用法实例详解

    目录 前言 三维情况 变化一:不改变任何参数 变化二:1与2交换 变化三:0与1交换 变化四:0与2交换 变化五:0与1交换,1与2交换 变化六:0与1交换,0与2交换 总结 前言 本文只讨论二维三维中的permute用法 最近的Attention学习中的一个permute函数让我不理解 这个光说太抽象 我就结合代码与图片解释一下 首先创建一个三维数组小实例 import torch x = torch.linspace(1, 30, steps=30).view(3,2,5) # 设置一个三维

  • 使用tensorflow根据输入更改tensor shape

    涉及随机数以及类RNN的网络构建常常需要根据输入shape,决定中间变量的shape或步长. tf.shape函数不同于tensor.shape.as_list()函数,后者返回的是常值list,而前者返回的是tensor. 使用tf.shape函数可以使得中间变量的tensor形状随输入变化,不需要在构建Graph的时候指定.但对于tf.Variable,因为需要提前分配固定空间,其shape无法通过上诉方法设定. 实例代码如下: a = tf.placeholder(tf.float32,[

随机推荐