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的设计模式编程入门指南
Apr 02 Python
浅谈Python中的可变对象和不可变对象
Jul 07 Python
Python 2.7中文显示与处理方法
Jul 16 Python
python3.7.0的安装步骤
Aug 27 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
微信小程序python用户认证的实现
Jul 29 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
Python接口自动化判断元素原理解析
Feb 24 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
PyQt5爬取12306车票信息程序的实现
May 14 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 Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php和asp语法上的区别总结
2019/05/12 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
bootstrap css样式之表单
2017/01/19 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
Vue实现渲染数据后控制滚动条位置(推荐)
2019/12/09 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
Python里隐藏的“禅”
2014/06/16 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
python实现发送邮件功能代码
2017/12/14 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
python实现的分层随机抽样案例
2020/02/25 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
办公室主任职责范文
2013/11/08 职场文书
税务专业毕业生自荐信
2013/11/10 职场文书
挂靠协议书范本
2014/04/22 职场文书
小学教师节活动总结
2015/03/20 职场文书
被告代理词范文
2015/05/25 职场文书