一、PyTorch 入门实战—Tensor(转)
一、Tensor的创建和使用
1.概念和TensorFlow的是基本一致的,只是代码编写格式的不同。我们声明一个Tensor,并打印它,例如:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([1, 2], [3, 4],[5, 6], [7, 8])
print(a)
print('{}'.format(a))
然后会发现报以下错误:
new() received an invalid combination of arguments - got (list, list, list, list), but expected one of: * (torch.device device) * (torch.Storage storage) * (Tensor other) * (tuple of ints size, torch.device device) * (object data, torch.device device)
意思是接收到无效的参数组合。其实是少写了一对中括号,这是初学者的常用错误。
2.改成如下形式:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(a)
print('{}'.format(a))
结果为:

3.如果想查看的它的大小可以加一句话:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a.size()))
结果为:

即4行2列的矩阵
4.如果想生成一个全为0的矩阵,可以输入如下代码:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a.size()))
b = torch.zeros((4, 2))
print(b)
结果为:

即4行2列数组元素全为0的矩阵
5.如果想生成不同类型的数据,可以改变torch.后面函数名称,例如下面这样:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a))
b = torch.zeros((4, 2))
print(b)
c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(c)
d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(d)
e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(e)
结果为:

6.如果想访问Tensor里的一个元素或者改变它,可以输入如下代码:
print(e[1, 1])
#改变元素值
e[1, 1] = 3
print(e[1, 1])
代码变为:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a))
b = torch.zeros((4, 2))
print(b)
c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(c)
d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(d)
e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(e)
print(e[1, 1])
#改变元素值
e[1, 1] = 3
print(e[1, 1])
结果为:

说明原来4的位置数值变为了3
7.最重要的是Tensor和Numpy之间的转换,例如我们把e变为numpy类型,添加以下代码:
f = e.numpy()
print(f)
变为:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a))
b = torch.zeros((4, 2))
print(b)
c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(c)
d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(d)
e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(e)
print(e[1, 1])
#改变元素值
e[1, 1] = 3
print(e[1, 1])
#转换为Numpy
f = e.numpy()
print(f)
结果为:

可以看到没有tensor()了~
我们再把f变为tensor类型,输入以下代码:
g = torch.from_numpy(f)
print(g)
变为:
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a))
b = torch.zeros((4, 2))
print(b)
c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(c)
d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(d)
e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(e)
print(e[1, 1])
#改变元素值
e[1, 1] = 3
print(e[1, 1])
#转换为Numpy
f = e.numpy()
print(f)
#转换为Tensor
g = torch.from_numpy(f)
print(g)
结果为:

可以看到又变成了Tensor类型
二、Tensor放到GPU上执行
1.通过如下代码判断是否支持GPU:
if torch.cuda.is_available():
h = g.cuda()
print(h)
变为
import torch
#定义一个Tensor矩阵
a = torch.Tensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print('{}'.format(a))
b = torch.zeros((4, 2))
print(b)
c = torch.IntTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(c)
d = torch.LongTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(d)
e = torch.DoubleTensor([[1, 2], [3, 4],[5, 6], [7, 8]])
print(e)
print(e[1, 1])
#改变元素值
e[1, 1] = 3
print(e[1, 1])
#转换为Numpy
f = e.numpy()
print(f)
#转换为Tensor
g = torch.from_numpy(f)
print(g)
#将Tensor放在GPU上
if torch.cuda.is_available():
h = g.cuda()
print(h)
2.生成结果会慢一下,然后可以看到多了一个device=‘cuda:0’:

三、Tensor总结
1.Tensor和Numpy都是矩阵,区别是前者可以在GPU上运行,后者只能在CPU上
2.Tensor和Numpy互相转化很方便,类型也比较兼容
3.Tensor可以直接通过print显示数据类型,而Numpy不可以,例如:dtype = torch.float64
一、PyTorch 入门实战—Tensor(转)的更多相关文章
- 二、PyTorch 入门实战—Variable(转)
目录 一.概念 二.Variable的创建和使用 三.标量求导计算图 四.矩阵求导计算图 五.Variable放到GPU上执行 六.Variable转Numpy与Numpy转Variable 七.Va ...
- 超简单!pytorch入门教程(一):Tensor
http://www.jianshu.com/p/5ae644748f21 二.pytorch的基石--Tensor张量 其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵 ...
- 深度学习入门实战(二)-用TensorFlow训练线性回归
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者 :董超 上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能 ...
- [pytorch] Pytorch入门
Pytorch入门 简单容易上手,感觉比keras好理解多了,和mxnet很像(似乎mxnet有点借鉴pytorch),记一记. 直接从例子开始学,基础知识咱已经看了很多论文了... import t ...
- Pytorch入门随手记
Pytorch入门随手记 什么是Pytorch? Pytorch是Torch到Python上的移植(Torch原本是用Lua语言编写的) 是一个动态的过程,数据和图是一起建立的. tensor.dot ...
- pytorch 入门指南
两类深度学习框架的优缺点 动态图(PyTorch) 计算图的进行与代码的运行时同时进行的. 静态图(Tensorflow <2.0) 自建命名体系 自建时序控制 难以介入 使用深度学习框架的优点 ...
- pytorch入门2.0构建回归模型初体验(数据生成)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
- Pytorch入门——手把手教你MNIST手写数字识别
MNIST手写数字识别教程 要开始带组内的小朋友了,特意出一个Pytorch教程来指导一下 [!] 这里是实战教程,默认读者已经学会了部分深度学习原理,若有不懂的地方可以先停下来查查资料 目录 MNI ...
- Pytorch入门上 —— Dataset、Tensorboard、Transforms、Dataloader
本节内容参照小土堆的pytorch入门视频教程.学习时建议多读源码,通过源码中的注释可以快速弄清楚类或函数的作用以及输入输出类型. Dataset 借用Dataset可以快速访问深度学习需要的数据,例 ...
随机推荐
- 如何开发优质的 Flutter App:应用架构的搭建
各位读者朋友们,好久不见了! 最近博主一直在忙于工作以及写<Flutter入门与应用实战>的书,所以没有时间打理博客.今天来给大家分享一个博主在GitChat上发起的一场Chat. 下面是 ...
- Java打印实心、空心的三角形和菱形
1.实心三角形 代码: import java.util.Scanner; public class Test { public static void main(String[] args) { i ...
- 【POJ - 3414】Pots(bfs)
Pots 直接上中文 Descriptions: 给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作 FILL(i) 将第i个容器从水龙头里装满(1 ≤ i ≤ 2); DRO ...
- [apue] popen/pclose 疑点解惑
问题请看这里: [apue] 使用 popen/pclose 的一点疑问 当时怀疑是pclose关闭了使用完成的管道,因此在pclose之前加一个足够长的sleep,再次观察进程文件列表: 哈哈,这下 ...
- python的is与==的区别
is is比较的是两个变量的地址值,如果地址值正确,则返回True,否则返回False,实例如下: 如图所示,a,b列表的数值相等,但地址是不相等的,所以返回True,与值无关 == ==比较的是两个 ...
- C++中 / 和 % 在分离各位时的妙用
在学习c++的过程中,我们一般用 / 和 % 来分解数字的各个位 取整 (/) 比如1234 / 10 等于 123.4,这相当于把前三位分解出来了 取余(%) 比如 12345 的分解方法 个位:1 ...
- win10win7office系列激活工具 KMSAuto Net 2016 v1.5.4 绿色便携版
下载地址:点我 KMSpico又称KMS激活工具,KMSpico是目前成功且经常更新的Windows激活工具,可以激活任何版本的window系统和任何版本的Office软件,即使是win8和offic ...
- .Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解
前言: 因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解.而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS ...
- I/O:ByteBuffer
ByteBuffer: static ByteBuffer allocate(int capacity) :分配一个新的字节缓冲区. static ByteBuffer allocateDirect( ...
- Sublime Text 3 实现C语言代码的编译和运行
Sublime Text 3 是一款优秀的代码编辑软件.界面简洁,轻巧快速,很受大家的欢迎. 最近开始用他来编辑数据结构的C语言代码,这就需要在新建编译系统.具体方法如下: 首先: 接下来是关键的一步 ...