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计算N天之后日期的方法
Mar 31 Python
Python验证文件是否可读写代码分享
Dec 11 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python高级用法总结
May 26 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
对python 读取线的shp文件实例详解
Dec 22 Python
浅析Django中关于session的使用
Dec 30 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
Python如何合并多个字典或映射
Jul 24 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python中实现词云图的示例
Dec 19 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提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
2015/08/24 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
javascript实现文件拖拽事件
2018/03/29 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
Python学习小技巧之列表项的排序
2017/05/20 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
零基础学python应该从哪里入手
2020/08/11 Python
HTML5 video标签(播放器)学习笔记(一):使用入门
2015/04/24 HTML / CSS
计算机应用与科学个人的自我评价
2013/11/15 职场文书
食品安全演讲稿
2014/09/01 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
祝酒词范文
2015/08/12 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电