前言

很多人都会拿PyTorch和Google的Tensorflow进行比较,这个肯定是没有问题的,因为他们是最火的两个深度学习框架了。但是说到PyTorch,其实应该先说Torch。

什么是Torch?
Torch是一个与Numpy类似的张量(Tensor)操作库,与Numpy不同的是Torch对GPU支持的很好。Lua是Torch的上层包装,虽然Lua速度很快,Lua实在是太小众了,所以才会有PyTorch的横空出世。

PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。 它主要由Facebook的人工智能研究小组开发。Uber的"Pyro"也是使用的这个库。

PyTorch是一个Python包,提供两个高级功能:

  • 具有强大的GPU加速的张量计算(如NumPy)
  • 包含自动求导系统的的深度神经网络

最后,关于Tensorflow和PyTorch的对比网上已经有很多了,这里就不详细说明了,有兴趣的可以看这篇文章https://zhuanlan.zhihu.com/p/28636490。

一、什么是张量(Tensor)

PyTorch是一个处理张量的库,张量是PyTorch里面基础运算单位,一个张量是一个数字、向量、矩阵或者任何n维数组。张量与Numpy的ndarray相同,都表示的是一个多维的矩阵。与ndarray的最大区别就是**:PyTorch的Tensor可以在GPU上运行,而numpy的ndarray只能在CPU上运行,在GPU上运行大大加快了运算速度。**

  • 导包
# 首先要导入相关的包,以保证程序可以正常运行
import numpy as np
import torch
# 我们可以通过打印PyTorch的版本来确定是否导入成功
torch.__version__
  • 新建一个简单的Tensor
# 生成一个2行3列的矩阵
x = torch.rand(2,3)
x
  • 查看Tensor的大小
# 可以使用与numpy相同的shape属性查看
print(x.shape)
# 也可以用使用size()函数
print(x.size())
  • 生成一个多维张量
y = torch.rand(2,3,4,5)
print(y.shape) # 打印y张量的大小
y

在同构的意义下,第0阶张量(r = 0)为标量(Scalar),第一阶张量(r = 1)为向量(Vector),第二阶张量(r = 2)则称为了矩阵(Matrix),第3阶以上的统称为多维张量。

  • 其中,特别主义的是标量,我们先来生成一个标量(scalar):
scalar = torch.tensor(3.1415926)
scalar
# 对于标量, 我们可以直接使用.item()从中取出其对应的Python对象
scalar.item()
# 特别的,如果张量中只有一个元素,也可以用.item()取出对应的Python对象
tensor1 = torch.tensor([3.1415926])
tensor1.item()

二、如何创建一个张量(Tensor)

  • 使用[0,1]均匀分布随机初始化张量
rnd = torch.rand(5,3)
rnd
  • 使用1填充
one = torch.ones(2,2)
one
  • 使用0填充
zero = torch.zeros(2,2)
zero
  • 初始化一个单位矩阵,即对角线为1,其它为0
eye = torch.eye(2,2)
eye

三、常用方法

PyTorch中对张量的操作api和Numpy非常相似,如果熟悉Numpy中的相关操作,它们两个是基本一致的

  • 首先,我们新建一个张量Tensor
rnd = torch.randn(3,3)
rnd

然后我们来进行以下的操作:

  • 沿着行取最大值
max_value,max_idx = torch.max(x,dim = 1)
max_value,max_idx
  • 沿着列取最大值
max_value,max_idx = torch.max(x,dim = 0)
max_value,max_idx
  • 求每行的和
sum_x = torch.sum(x,dim = 1)
sum_x
  • 求每列的和
sum_y = torch.sum(x,dim = 0)
sum_y
  • 求两个张量的和
# 首先我们需要另建一个张量y
y = torch.randn(3,3)
z = x+y
z
  • 任何以“-”结尾的操作都会用结果替换原变量,例如:“x.copy_(y)”,都会改变x
x = torch.randn(3,3)
print('修改前', x)
y = torch.randn(3,3)
x.add_(y)
print('修改后', x)

四、张量(Tensor)和Numpy对象的互相转换

Tensor和numpy对象共享内存,所以他们之间的转换很快,而且几乎不会消耗什么资源。但这也意味着,如果其中一个改变了,另外一个也会随之改变。

  • Tensor转为Numpy对象
a = torch.randn((3,2))
# 将tensor转为numpy
numpy_a = a.numpy()
print(numpy_a)
  • Numpy对象转为Tensor
torch_a = torch.from_numpy(numpy_a)
print(torch_a)

五、参考文献

https://github.com/zergtant/pytorch-handbook/blob/master/chapter2/2.1.1.pytorch-basics-tensor.ipynb

PyTorch基础(一)-----张量(Tensor)相关推荐

  1. 【深度之眼PyTorch框架班第五期】作业打卡01:PyTorch简介及环境配置;PyTorch基础数据结构——张量

    文章目录 任务名称 任务简介 详细说明 作业 1. 安装anaconda,pycharm, CUDA+CuDNN(可选),虚拟环境,pytorch,并实现hello pytorch查看pytorch的 ...

  2. Pytorch基础之张量的存储方式及维度操作:size,shape,view,reshape,contiguous

    参考书目:张校捷,<深入浅出PyTorch:从模型到源码> Pytorch中张量的存储 假设存在一个k维张量,其维数为[ n 1 , n 2 . . . n k n_1,n_2...n_k ...

  3. pytorch2——Pytorch基础数据结构——张量(深度之眼)

    前情提要 在上一篇文章中,我们详细介绍了如何搭建一个pytorch的环境,那么本篇文章我们即将揭开pytorch的神秘面纱,了解pytorch中的数据结构--Tensor. 概念问答 张量是什么? 张 ...

  4. Pytorch入门之张量tensor

    一.张量tensor 张量的三个特征:秩.轴.形状 张量的秩是指索引的个数,轴是指每一个维度的最大的索引的值,张量的形状提供了维度和索引的数量关系. 经常需要对张量进行重塑 t.reshape(1,9 ...

  5. 深度学习框架pytorch入门之张量Tensor(一)

    文章目录 一.简介 二.查看帮助文档 三.Tensor常用方法 1.概述 2.新建方法 (1)Tensor(*sizes) tensor基础构造函数 (2)ones(*sizes) 构造一个全为1的T ...

  6. 第1周学习笔记:深度学习和pytorch基础

    目录 一 视频学习 1.绪论 2.深度学习概述 二 代码学习 1.Pytorch基础练习 2.螺旋数据分类 一 视频学习 1.绪论 人工智能(Artificial Intelligence):使一部机 ...

  7. Pytorch张量tensor的使用

    1. 张量Tensor Tensors张量: 张量的概念类似于Numpy中的ndarray数据结构, 最大的区别在于Tensor可以利用GPU的加速功能. 张量是一个统称,其中包含很多类型:   [各 ...

  8. pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换

    pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换 1, 创建pytorch 的Tensor张量: torch.rand((3,224,224)) #创建随机值的三维张量,大小为 ...

  9. pytorch 创建张量tensor

    pytorch 创建张量tensor 先看下面一张图 通过上图有了一个直观了解后,我们开始尝试创建一下. 先创建一个标量和一个向量 a = torch.tensor([1]) #标量 print(a) ...

最新文章

  1. python自动化办公兼职-python如何实现自动化办公?
  2. Python 中__new__()和__init__()的区别
  3. 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
  4. BZOJ3236 [Ahoi2013]作业
  5. java9 揭秘 jlink_初试Java9
  6. Android学习笔记(十八)——使用意图筛选器和实现浏览网页(附源代码)
  7. C# dataGridView用法
  8. 算法基础--基本排序算法总结·
  9. eclipse 插件 subclipse plugin 中修改已经登录的帐户密码的方法
  10. 【简历模板】网站推荐
  11. Android——GSON解析JSON
  12. 网页页面缩小放大的快捷键
  13. 四川大学计算机学院博士复试分数线,四川大学2021年博士合格分数线和参加外语考核考生名单...
  14. C++横板格斗小游戏(基于Easyx图形库)
  15. Java对接网易云信IM 即时通讯
  16. 股票期货化数据文大覆盖国6大交易所的历史数据和实时行情
  17. 基于RHEL7进行grub加密和解密
  18. 如何快速实现移动 App 对智能设备的连接和控制,打造丰富的智能生活场景?
  19. 抖音seo账号矩阵霸屏系统源码/账号矩阵系统搭建部署
  20. 什么是分账?企业为什么需要分账?

热门文章

  1. 软件体系架构——质量属性
  2. 分页原理+分页代码+分页类制作
  3. 用python爬虫抓站的一些技巧总结
  4. 预防鼻炎以及空气污染对策
  5. 关于.net Microsoft.Office.Interop.Word组建操作word的问题,如何控制word表格单元格内部段落的样式。...
  6. Android与Javascript交互示例(二)
  7. 【Leetcode】大神总结的链表常见面试问题
  8. [云炬创业基础笔记] 第三章测试3
  9. 科大星云诗社动态20201227
  10. 科大星云诗社动态20210529