PyTorch教程之Tensors
Tensors类似于numpy的ndarrays,但是可以在GPU上使用来加速计算。
一、Tensors的构建
from __future__ import print_function
import torch
构建未初始化的5x3矩阵:
x = torch.Tensor(5, 3)
print(x)
输出结果:
-2.9226e-26 1.5549e-41 1.5885e+14
0.0000e+00 7.0065e-45 0.0000e+00
7.0065e-45 0.0000e+00 4.4842e-44
0.0000e+00 4.6243e-44 0.0000e+00
1.5810e+14 0.0000e+00 1.6196e+14
[torch.FloatTensor of size 5x3]
构造一个随机初始化的矩阵:
x = torch.rand(5, 3)
print(x)
输出结果:
0.8168 0.4588 0.8139
0.7271 0.3067 0.2826
0.1570 0.2931 0.3173
0.8638 0.6364 0.6177
0.2296 0.1411 0.1117
[torch.FloatTensor of size 5x3]
查看size:
print(x.size())
输出结果:
torch.Size([5, 3])
torch.Size 实际上上一个tuple, 因而支持基于tuple的所有运算。
二、Tensor的运算操作
Tensor的运算操作语法有很多种,以下一一演示。
语法1:
y = torch.rand(5, 3)
print(x + y)
输出结果:
0.9616 0.8727 1.6763
1.4781 0.7961 1.2082
0.6717 0.9821 0.6129
1.2544 1.0118 1.2720
1.0912 0.3207 0.4200
[torch.FloatTensor of size 5x3]
语法2:
print(torch.add(x, y))
输出结果:
0.9616 0.8727 1.6763
1.4781 0.7961 1.2082
0.6717 0.9821 0.6129
1.2544 1.0118 1.2720
1.0912 0.3207 0.4200
[torch.FloatTensor of size 5x3]
语法3:
result = torch.Tensor(5, 3)
torch.add(x, y, out=result)
print(result)
输出结果:
0.9616 0.8727 1.6763
1.4781 0.7961 1.2082
0.6717 0.9821 0.6129
1.2544 1.0118 1.2720
1.0912 0.3207 0.4200
[torch.FloatTensor of size 5x3]
语法4:
# adds x to y
y.add_(x)
print(y)
输出结果:
0.9616 0.8727 1.6763
1.4781 0.7961 1.2082
0.6717 0.9821 0.6129
1.2544 1.0118 1.2720
1.0912 0.3207 0.4200
[torch.FloatTensor of size 5x3]
任何一个会改变 tensor的操作都会加上下划线,例如x.copy_(y)和x.t_().
语法5:
print(x[:, 1])
输出结果:
0.4588
0.3067
0.2931
0.6364
0.1411
[torch.FloatTensor of size 5]
任何numpy标准库中的索引操作都可以用于tensor
三、Tensor与numpy的互相转化
1.从torch Tensor 到 numpy Array
构建Tensor
a = torch.ones(5)
print(a)
输出结果:
1
1
1
1
1
[torch.FloatTensor of size 5]
转化为 Array
b = a.numpy()
print(b)
输出结果:
[ 1. 1. 1. 1. 1.]
对Tensor 进行加法操作:
a.add_(1)
print(a)
print(b)
输出结果:
2
2
2
2
2
[torch.FloatTensor of size 5] [ 2. 2. 2. 2. 2.]
可以看到对Tensor进行的加法操作映射到了对应Arrayy当中,二者共用内存,属于浅拷贝。
2.从numpy Array到 torch Tensor
构建和转化的方法与前者类似:
import numpy as np
a = np.ones(5)
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print(a)
print(b)
输出结果:
[ 2. 2. 2. 2. 2.] 2
2
2
2
2
[torch.DoubleTensor of size 5]
可以看到对Array进行的加法操作同样映射到了对应Tensor当中,二者共用内存,也属于浅拷贝。
四、GPU运算
tensor可以使用CUDA函数移动到GPU上:
if torch.cuda.is_available():
x = x.cuda()
y = y.cuda()
x + y
输出结果:
0.4457 1.3248 1.9033
0.8010 1.4461 1.0481
1.2691 1.8655 0.4001
0.6913 0.2979 0.2352
1.0372 1.0988 1.2159
[torch.cuda.FloatTensor of size 5x3 (GPU 0)]
PyTorch教程之Tensors的更多相关文章
- PyTorch教程之Training a classifier
我们已经了解了如何定义神经网络,计算损失并对网络的权重进行更新. 接下来的问题就是: 一.What about data? 通常处理图像.文本.音频或视频数据时,可以使用标准的python包将数据加载 ...
- PyTorch教程之Neural Networks
我们可以通过torch.nn package构建神经网络. 现在我们已经了解了autograd,nn基于autograd来定义模型并对他们有所区分. 一个 nn.Module模块由如下部分构成:若干层 ...
- PyTorch教程之Autograd
在PyTorch中,autograd是所有神经网络的核心内容,为Tensor所有操作提供自动求导方法. 它是一个按运行方式定义的框架,这意味着backprop是由代码的运行方式定义的. 一.Varia ...
- [转]搬瓦工教程之九:通过Net-Speeder为搬瓦工提升网速
搬瓦工教程之九:通过Net-Speeder为搬瓦工提升网速 有的同学反映自己的搬瓦工速度慢,丢包率高.这其实和你的网络服务提供商有关.据我所知一部分上海电信的同学就有这种问题.那么碰到了坑爹的网络服务 ...
- jQuery EasyUI教程之datagrid应用(三)
今天继续之前的整理,上篇整理了datagrid的数据显示及其分页功能 获取数据库数据显示在datagrid中:jQuery EasyUI教程之datagrid应用(一) datagrid实现分页功能: ...
- jQuery EasyUI教程之datagrid应用(二)
上次写到了让数据库数据在网页datagrid显示,我们只是单纯的实现了显示,仔细看的话显示的信息并没有达到我们理想的效果,这里我们丰富一下: 上次显示的结果是这样的 点击查看上篇:jQuery Eas ...
- jQuery EasyUI教程之datagrid应用(一)
最近一段时间都在做人事系统的项目,主要用到了EasyUI,数据库操作,然后抽点时间整理一下EasyUI的内容. 这里我们就以一个简洁的电话簿软件为基础,具体地说一下datagrid应用吧 datagr ...
- kali linux 系列教程之metasploit 连接postgresql可能遇见的问题
kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂 目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...
- kali Linux系列教程之BeFF安装与集成Metasploit
kali Linux系列教程之BeFF安装与集成Metasploit 文/玄魂 kali Linux系列教程之BeFF安装与集成Metasploit 1.1 apt-get安装方式 1.2 启动 1. ...
随机推荐
- python进阶学习(四)
在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...
- 七字真言解读TCP三次握手
三次握手所谓的"三次握手"即对每次发送的数据量是怎样跟踪进行协商使的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送.接收完毕后何时撤消联系,并建立虚连接. 一.七 ...
- 深入理解计算机系统(1.1)------Hello World 是如何运行的
上一篇序章我谈了谈 程序员为啥要懂底层计算机结构 ,有人赞同也有人反对,但是这并不影响 LZ 对深入理解计算机系统研究的热情.这篇博客以案例驱动的模式,通过跟踪一个简单 Hello World 程序的 ...
- CCIE-MPLS VPN-实验手册(中卷)
5:MPLS VPN PE CE OSPF 实验1 5.1 实验拓扑 5.2 实验需求 a. R1 R2 R3 组成P-NETWORK,底层协议采用EIGRP b. R1 R2 R3 直连链路启用LD ...
- 201521123042《Java程序设计》 第7周学习总结
1. 本周学习总结 网上看了很多资料,发现这一张图总结的还不错就引用过来了.但是最上面的Map和Collection之间的关系应该是依赖,不是Produces. ①概述:Java集合框架主要包括两种类 ...
- java201521123118《java程序设计》第5周总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过 ...
- 201521123040《Java程序设计》第3周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传.参考资料:百度 ...
- 201521123112《Java程序设计》第11周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 线程终止可以使用boolean标志使线程中的run()方法退出. 线程让步使用Thead.yield(). 等待其 ...
- 201521123038 《Java程序设计》 第十三周学习总结
201521123038 <Java程序设计> 第十三周学习总结 1. 本周学习总结 端口:区分一台主机上的不同服务,不是物理接口 ipconfig:查看网络配置 ping:检查网络是否连 ...
- 201521123053《Java课程设计》第十四周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 知识点: 创建表的命令有若干行,如果中间某行输入错误,不能修改:可以使用记事本现将命令输入,然后复制粘贴到mys ...