PyTorch基本数据类型(一)


Posted in Python onMay 22, 2019

PyTorch基础入门一:PyTorch基本数据类型

1)Tensor(张量)

Pytorch里面处理的最基本的操作对象就是Tensor(张量),它表示的其实就是一个多维矩阵,并有矩阵相关的运算操作。在使用上和numpy是对应的,它和numpy唯一的不同就是,pytorch可以在GPU上运行,而numpy不可以。所以,我们也可以使用Tensor来代替numpy的使用。当然,二者也可以相互转换。

Tensor的基本数据类型有五种:

  • 32位浮点型:torch.FloatTensor。pyorch.Tensor()默认的就是这种类型。
  • 64位整型:torch.LongTensor。
  • 32位整型:torch.IntTensor。
  • 16位整型:torch.ShortTensor。
  • 64位浮点型:torch.DoubleTensor。

那么如何定义Tensor张量呢?其实定义的方式和numpy一样,直接传入相应的矩阵即可即可。下面就定义了一个三行两列的矩阵:

import torch
# 导包
 
a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
print(a)

不过在项目之中,更多的做法是以特殊值或者随机值初始化一个矩阵,就像下面这样:

import torch
 
# 定义一个3行2列的全为0的矩阵
b = torch.zeros((3, 2))
 
# 定义一个3行2列的随机值矩阵
c = torch.randn((3, 2))
 
# 定义一个3行2列全为1的矩阵
d = torch.ones((3, 2))
 
print(b)
print(c)
print(d)

Tensor和numpy.ndarray之间还可以相互转换,其方式如下:

  • Numpy转化为Tensor:torch.from_numpy(numpy矩阵)
  • Tensor转化为numpy:Tensor矩阵.numpy()

范例如下:

import torch
import numpy as np
 
# 定义一个3行2列的全为0的矩阵
b = torch.randn((3, 2))
 
# tensor转化为numpy
numpy_b = b.numpy()
print(numpy_b)
 
# numpy转化为tensor
numpy_e = np.array([[1, 2], [3, 4], [5, 6]])
torch_e = torch.from_numpy(numpy_e)
 
print(numpy_e)
print(torch_e)

之前说过,numpy与Tensor最大的区别就是在对GPU的支持上。Tensor只需要调用cuda()函数就可以将其转化为能在GPU上运行的类型。

我们可以通过torch.cuda.is_available()函数来判断当前的环境是否支持GPU,如果支持,则返回True。所以,为保险起见,在项目代码中一般采取“先判断,后使用”的策略来保证代码的正常运行,其基本结构如下:

import torch
 
# 定义一个3行2列的全为0的矩阵
tmp = torch.randn((3, 2))
 
# 如果支持GPU,则定义为GPU类型
if torch.cuda.is_available():
  inputs = tmp.cuda()
# 否则,定义为一般的Tensor类型
else:
  inputs = tmp

2)Variable(变量)

Pytorch里面的Variable类型数据功能更加强大,相当于是在Tensor外层套了一个壳子,这个壳子赋予了前向传播,反向传播,自动求导等功能,在计算图的构建中起的很重要的作用。Variable的结构图如下:

PyTorch基本数据类型(一)

其中最重要的两个属性是:data和grad。Data表示该变量保存的实际数据,通过该属性可以访问到它所保存的原始张量类型,而关于该 variable(变量)的梯度会被累计到.grad 上去。

在使用Variable的时候需要从torch.autograd中导入。下面通过一个例子来看一下它自动求导的过程:

import torch
from torch.autograd import Variable
 
# 定义三个Variable变量
x = Variable(torch.Tensor([1, 2, 3]), requires_grad=True)
w = Variable(torch.Tensor([2, 3, 4]), requires_grad=True)
b = Variable(torch.Tensor([3, 4, 5]), requires_grad=True)
 
# 构建计算图,公式为:y = w * x^2 + b
y = w * x * x + b
 
# 自动求导,计算梯度
y.backward(torch.Tensor([1, 1, 1]))
 
print(x.grad)
print(w.grad)
print(b.grad)

上述代码的计算图为y = w * x^2 + b。对x, w, b分别求偏导为:x.grad = 2wx,w.grad=x^2,b.grad=1。代值检验可得计算结果是正确的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用chardet判断字符串编码的方法
Mar 13 Python
简单介绍Python下自己编写web框架的一些要点
Apr 29 Python
Python 装饰器深入理解
Mar 16 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
python logging设置level失败的解决方法
Feb 19 Python
python实现吃苹果小游戏
Mar 21 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
PyTorch搭建多项式回归模型(三)
May 22 #Python
pytorch使用Variable实现线性回归
May 21 #Python
Python面向对象进阶学习
May 21 #Python
谈一谈基于python的面向对象编程基础
May 21 #Python
python字符串和常用数据结构知识总结
May 21 #Python
Opencv实现抠图背景图替换功能
May 21 #Python
python多进程读图提取特征存npy
May 21 #Python
You might like
PHP获取文件夹内文件数的方法
2015/03/12 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
大白话讲解JavaScript的Promise
2017/04/06 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
Node.js Koa2使用JWT进行鉴权的方法示例
2018/08/17 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
有趣的广告词
2014/03/18 职场文书
珠宝店促销方案
2014/03/21 职场文书
初一新生军训方案
2014/05/22 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
争先创优公开承诺书
2014/08/30 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
作风建设年度心得体会
2014/10/29 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
高一军训口号
2015/12/25 职场文书