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的更多相关文章

  1. PyTorch教程之Training a classifier

    我们已经了解了如何定义神经网络,计算损失并对网络的权重进行更新. 接下来的问题就是: 一.What about data? 通常处理图像.文本.音频或视频数据时,可以使用标准的python包将数据加载 ...

  2. PyTorch教程之Neural Networks

    我们可以通过torch.nn package构建神经网络. 现在我们已经了解了autograd,nn基于autograd来定义模型并对他们有所区分. 一个 nn.Module模块由如下部分构成:若干层 ...

  3. PyTorch教程之Autograd

    在PyTorch中,autograd是所有神经网络的核心内容,为Tensor所有操作提供自动求导方法. 它是一个按运行方式定义的框架,这意味着backprop是由代码的运行方式定义的. 一.Varia ...

  4. [转]搬瓦工教程之九:通过Net-Speeder为搬瓦工提升网速

    搬瓦工教程之九:通过Net-Speeder为搬瓦工提升网速 有的同学反映自己的搬瓦工速度慢,丢包率高.这其实和你的网络服务提供商有关.据我所知一部分上海电信的同学就有这种问题.那么碰到了坑爹的网络服务 ...

  5. jQuery EasyUI教程之datagrid应用(三)

    今天继续之前的整理,上篇整理了datagrid的数据显示及其分页功能 获取数据库数据显示在datagrid中:jQuery EasyUI教程之datagrid应用(一) datagrid实现分页功能: ...

  6. jQuery EasyUI教程之datagrid应用(二)

    上次写到了让数据库数据在网页datagrid显示,我们只是单纯的实现了显示,仔细看的话显示的信息并没有达到我们理想的效果,这里我们丰富一下: 上次显示的结果是这样的 点击查看上篇:jQuery Eas ...

  7. jQuery EasyUI教程之datagrid应用(一)

    最近一段时间都在做人事系统的项目,主要用到了EasyUI,数据库操作,然后抽点时间整理一下EasyUI的内容. 这里我们就以一个简洁的电话簿软件为基础,具体地说一下datagrid应用吧 datagr ...

  8. kali linux 系列教程之metasploit 连接postgresql可能遇见的问题

    kali linux 系列教程之metasploit 连接postgresql可能遇见的问题 文/玄魂   目录 kali linux 下metasploit 连接postgresql可能遇见的问题. ...

  9. kali Linux系列教程之BeFF安装与集成Metasploit

    kali Linux系列教程之BeFF安装与集成Metasploit 文/玄魂 kali Linux系列教程之BeFF安装与集成Metasploit 1.1 apt-get安装方式 1.2 启动 1. ...

随机推荐

  1. HttpResponseMessage获取请求响应体内容

    问题描述 使用httpClient获取的HttpResponseMessage类型的response,直接对其toString()获取的是请求的响应头,并没有获取响应体的内容 解决办法 HttpRes ...

  2. string,char*,int 之间的转化

    c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...

  3. java冒泡排序详解

    冒泡排序 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始 ...

  4. POI设置excel添加列下拉框

    POI在生成excel模板时需要为列添加下拉框,我写了两个方法. @ 方法一:适用任何情况,不受下拉框值数量限制.但是需要通过引用其它列值. 思路大概如下: 1.创建一个隐藏的sheet页,用于存放下 ...

  5. EF增删改查+使用Expression进行动态排序分页

    注:以下部分来自<ASP.NET MVC 企业级实战>一书的摘抄和改写以及部分个人学习心得. EF简单增删改查 增加 public static int Add() { using (No ...

  6. 构建具有用户身份认证的 React + Flux 应用程序

    原文:Build a React + Flux App with User Authentication 译者:nzbin 译者的话:这是一篇内容详实的 React + Flux 教程,文章主要介绍了 ...

  7. Jquery 清空input file的值

    var file = $(obj).parent().find(".fileData");                $(file).val('');

  8. 如何使用Git和码云Git@OSC

    1.Git简介 关于Git是什么,阅读博客Git简介 2.Git 基础 Git命令很多,常用命令如下图 Workspace:工作区 Index/Stage :暂存区 Local Repository: ...

  9. 【Beta阶段】第七次scrum meeting

    Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 配合100完成联网功能 100% 设置个人中心的设计 100 DEV 开始 ...

  10. Beta的计划和人员的变动

    一.新的成员和组长是否重选: 刘光华:先加入的一个帅哥,乐于助人,编码基础不是很好,但是有一颗热爱学习的心,会积极主动的完成自己的任务的,一句话宣言:我们的团队是最棒的! 程志铭:做事认真负责,工作脚 ...