一、Tensor基础
1、基本创建方法
Ⅰ,tensor创建
torch.Tensor(2,4)
创建一个2×4的二维张量;也可以通过列表进行自定义tensor元素
同理
torch.Tensor(5)
创建一个1×5的一维张量;
torch.Tensor(2,4,5)
创建一个2×4×5的三维张量,说白了也就是2个4×5的二维向量叠加
import torchx = torch.Tensor(2,4)
x
"""
tensor([[7.8473e-44, 8.1275e-44, 7.0065e-44, 7.5670e-44],[8.1275e-44, 6.8664e-44, 7.0065e-44, 6.4460e-44]])
"""x1 = torch.Tensor([[1,2,3],[4,1,2]])
x1
"""
tensor([[1., 2., 3.],[4., 1., 2.]])
"""y = torch.Tensor(5)
y
"""
tensor([4.3911e-05, 4.0370e-08, 1.3733e-05, 1.0548e-08, 4.1886e-11])
"""z = torch.Tensor(3,4,5)
z
"""
tensor([[[-9.4222e+03, 5.7173e-43, -2.5867e-08, 2.0179e-43, 0.0000e+00],[ 0.0000e+00, 2.1019e-44, 0.0000e+00, -9.1735e+03, 5.7173e-43],[-2.5867e-08, 2.0179e-43, 0.0000e+00, 0.0000e+00, 2.1019e-44],[ 0.0000e+00, -1.0077e+04, 5.7173e-43, -2.5867e-08, 2.0179e-43]],[[ 0.0000e+00, 0.0000e+00, 2.1019e-44, 0.0000e+00, -1.0126e+04],[ 5.7173e-43, -2.5867e-08, 2.0179e-43, 0.0000e+00, 0.0000e+00],[ 2.1019e-44, 0.0000e+00, -7.9165e+03, 5.7173e-43, -2.5867e-08],[ 2.0179e-43, 0.0000e+00, 0.0000e+00, 2.1019e-44, 0.0000e+00]],[[-9.9800e+03, 5.7173e-43, -2.5867e-08, 2.0179e-43, 0.0000e+00],[ 0.0000e+00, 2.1019e-44, 0.0000e+00, -1.0127e+04, 5.7173e-43],[-2.5867e-08, 2.0179e-43, 0.0000e+00, 0.0000e+00, 2.1019e-44],[ 0.0000e+00, -1.0132e+04, 5.7173e-43, -2.5867e-08, 2.0179e-43]]])
"""
Ⅱ,tpye()和dtpye
type()
是python内置的函数,返回数据结构类型(list、dict、numpy.ndarray 等)
dtype
返回数据元素的数据类型(int、float等)
import torchx = torch.Tensor(2,4)
x.type() #'torch.FloatTensor'
x.dtype #torch.float32
Ⅲ,对List数据结构进行操作
List转tensor
import torchlist = [[1,2,3],[4,5,6],[7,8,9]]
torch.Tensor(list)
"""
tensor([[1., 2., 3.],[4., 5., 6.],[7., 8., 9.]])
"""
对tensor通过索引进行操作
import torchx = torch.Tensor([[3,4,5],[1,2,3]])
x
"""
tensor([[3., 4., 5.],[1., 2., 3.]])
"""
x[0][2] # tensor(5.)x[0][2] = 8
x
"""
tensor([[3., 4., 8.],[1., 2., 3.]])
"""
Ⅳ,常用快速创建tensor的函数
红色字体可以按需修改
函数 | 说明 |
---|---|
torch.zeros(2,3) |
创建2×3 全0的tensor
|
troch.ones(3,2) |
创建3×2 全1的tensor
|
torch.rand(2,5) |
创建在[0,1)区间的2×5 的tensor
|
torch.arange(1,4,0.5) |
创建在[1,4) 区间0.5 步长的一维tensor
|
torch.linspace(1,5,8) |
在[1,5) 区间均匀划分8 个一维tensor
|
torch.eye(3) |
创建3×3 的单位矩阵tensor
|
import torchx = torch.zeros(2,3)
x
"""
tensor([[0., 0., 0.],[0., 0., 0.]])
"""y = torch.linspace(1,5,4)
y # tensor([1.0000, 2.3333, 3.6667, 5.0000])z = torch.rand(2,5)
z
"""
tensor([[0.7398, 0.4534, 0.8604, 0.0465, 0.8646],[0.7877, 0.5388, 0.6655, 0.3565, 0.9552]])
"""
Ⅴ,常用数学操作
举几个例子就行,其他的到后面实战的时候再查就行
函数 | 说明 |
---|---|
torch.add(a,b) | a和b为相同形状的tensor,每个元素对应相加 |
a.add(b) | 以a为基础,将b的元素对应加到a上,不覆盖a对象 |
a.add_(b) | 以a为基础,将b的元素对应加到a上,且覆盖a对象 |
torch.sum(a) | 返回a中所有元素之和 |
torch.max(a) | 返回a中所有元素的最大值 |
torch.abs(a) | 返回a中所有元素的绝对值 |
import torcha = torch.Tensor([[1,2,3],[1,2,2]])
b = torch.zeros(2,3)torch.add(a,b)
"""
tensor([[1., 2., 3.],[1., 2., 2.]])
"""b.add(a)
b
"""
tensor([[0., 0., 0.],[0., 0., 0.]])
"""b.add_(a)
b
"""
tensor([[1., 2., 3.],[1., 2., 2.]])
"""torch.max(a) # tensor(3.)
Ⅵ,常用线性代数运算
函数 | 说明 |
---|---|
torch,dot(a,b) |
向量a和向量点积(内积),行向量 乘列向量 ,即对应元素相乘再相加 ,a和b为一维的tensor,
|
torch.mv(a,b) |
矩阵a和向量b乘法,矩阵 乘列向量 ,a为二维tensor,b为一维tensor
|
torch.mm(a,b) |
矩阵a和矩阵b乘法,矩阵 乘矩阵 ,前行 乘后列 ,a和b为二维tensor
|
import torcha = torch.Tensor([2,2,2])
b = torch.Tensor([1,2,3])
c = torch.Tensor([[1,2,1],[2,1,1,],[3,2,2,]])torch.dot(a,b) # tensor(12.)
torch.mv(c,a) # tensor([ 8., 8., 14.])
torch.mm(c,c)
"""
tensor([[ 8., 6., 5.],[ 7., 7., 5.],[13., 12., 9.]])
"""
Ⅶ,拼接
这个函数在神经网络模型中还是用的比较多的
函数 | 说明 |
---|---|
torch.cat((a,b),0) |
a和b两个相同维度的tensor在第一个维度拼接,竖着 拼接,联想0 是竖着的
|
torch.cat((a,b),1) |
a和b两个相同维度的tensor在第二个维度拼接,横着 拼接,联想汉字一 是横着的
|
import torchx = torch.Tensor([[1,2,3],[2,3,1]])
y = torch.Tensor([[4,3,2],[9,9,8]])torch.cat((x,y),1)
"""
tensor([[1., 2., 3., 4., 3., 2.],[2., 3., 1., 9., 9., 8.]])
"""torch.cat((x,y),0)
"""
tensor([[1., 2., 3.],[2., 3., 1.],[4., 3., 2.],[9., 9., 8.]])
"""
Ⅷ,切片
函数 | 说明 |
---|---|
torch.chunk(a,3,1) |
将a 对象中元素切分为3 块,按第一维度(0,上下分) 进行切分
|
torch.chunk(a,2,1) |
将a 对象中元素切分为2 块,按第二维度(1,左右分) 进行切分
|
torch.t(a) | a为二维tensor对象,求其转置矩阵 |
import torcha = torch.Tensor([[1,2,3],[3,3,2,],[1,2,3],[9,8,2]])
a
"""
tensor([[1., 2., 3.],[3., 3., 2.],[1., 2., 3.],[9., 8., 2.]])
"""torch.chunk(a,3,1)
"""
(tensor([[1.],[3.],[1.],[9.]]),tensor([[2.],[3.],[2.],[8.]]),tensor([[3.],[2.],[3.],[2.]]))
"""torch.chunk(a,2,0)
"""
(tensor([[1., 2., 3.],[3., 3., 2.]]),tensor([[1., 2., 3.],[9., 8., 2.]]))
"""
Ⅸ,改变现状
这个函数在神经网络模型中还是用的比较多的
函数 | 说明 |
---|---|
a.view(2,3) |
将a 这个tensor转换为2×3 的tensor
|
a.view(-1,3) |
将a 这个tensor转换为x×3 的tensor,其中x 会自动进行计算
|
import torchx = torch.rand(5,4)
x.size() # torch.Size([5, 4])y = x.view(2,10)
y.size() # torch.Size([2, 10])z = x.view(-1,5)
z.size() # torch.Size([4, 5])
2、Autograd自动微分
Ⅰ,前向传播
Tensor对象都有有个属性requires_grad
,将其设置为True
即可让PyTroch自动计算Tensor对象的微分,grad_fn为微分函数
import torch
x = torch.Tensor([[1,2],[3,2]])
x
"""
tensor([[1., 2.],[3., 2.]])
"""x.requires_grad = True
x
"""tensor([[1., 2.],[3., 2.]], requires_grad=True)
"""
Ⅱ,反向传播
调用backward()函数,可实现对整个图进行反向传播,从而求出微分值
因为输出节点y为非标量,使用backward()函数的时候需要传入一个与输出节点现状保持一致且元素值均为1的参数,即y.backward(torch.ones(y.size()))
import torchx = torch.Tensor([[1,3],[4,5]])
x.requires_grad = True
x
"""
tensor([[1., 3.],[4., 5.]], requires_grad=True)
"""y = 2*x*x
y
"""
tensor([[ 2., 18.],[32., 50.]], grad_fn=<MulBackward0>)
"""y.backward(torch.ones(y.size()))x.grad
"""
tensor([[ 4., 12.],[16., 20.]])
"""
一、Tensor基础相关推荐
- Tensor基础实践
Tensor基础实践 飞桨(PaddlePaddle,以下简称Paddle)和其他深度学习框架一样,使用Tensor来表示数据,在神经网络中传递的数据均为Tensor. Tensor可以将其理解为多维 ...
- Tensor基础操作总结
文章目录 前言 一.tensor是什么? 二.tensor的基本操作 1.tensor的创建 2.基础操作 3.索引与切片 4.广播机制 5.tensor和numpy的互相转换 6.在GPU上使用te ...
- 【TensorFlow2.0】(1) tensor数据类型,类型转换
各位同学好,今天和大家分享一下TensorFlow2.0中的tensor数据类型,以及各种类型之间的相互转换方法. 1. tf.tensor 基础操作 scaler标量:1.2 vector向量:[1 ...
- 深度学习导论(3)PyTorch基础
深度学习导论(3)PyTorch基础 一. Tensor-Pytorch基础数据结构 二. Tensor索引及操作 1. Tensor索引类型 2. Tensor基础操作 3. 数值类型 4. 数值类 ...
- 飞桨框架v2.3 API最新升级 | 对科学计算、概率分布和稀疏Tensor等提供更全面支持
本文已在飞桨公众号发布,查看请戳链接: 飞桨框架v2.3 API最新升级!对科学计算.概率分布和稀疏Tensor等提供更全面支持! 2022年5月飞桨框架2.3版本正式发布,相比飞桨框架2.2版本,A ...
- 飞桨框架v2.3 API最新升级!对科学计算、概率分布和稀疏Tensor等提供更全面支持!...
2022年5月飞桨框架2.3版本正式发布,相比飞桨框架2.2版本,API体系更加丰富,新增了100多个API,覆盖自动微分.概率分布.稀疏Tensor.拟牛顿优化器.线性代数.框架性能分析.硬件设备管 ...
- 深度学习框架pytorch入门之张量Tensor(一)
文章目录 一.简介 二.查看帮助文档 三.Tensor常用方法 1.概述 2.新建方法 (1)Tensor(*sizes) tensor基础构造函数 (2)ones(*sizes) 构造一个全为1的T ...
- MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测
Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...
- 使用PaddleFluid和TensorFlow训练RNN语言模型
专栏介绍:Paddle Fluid 是用来让用户像 PyTorch 和 Tensorflow Eager Execution 一样执行程序.在这些系统中,不再有模型这个概念,应用也不再包含一个用于描述 ...
最新文章
- Visual SLAM
- Java连接数据库(4)
- [vue] 说说你对vue的错误处理的了解?
- 知识图谱之语言计算与信息抽取
- 将对话框(提示框)中的内容粘贴到记事本
- 几何元素网页设计的力量,让人眼前一亮
- 关闭迅雷“XLServicePlatform”服务 防止导致Win8假死
- extThree20XML extThree20JSON 引入到工程中的方式
- 孙鑫VC学习笔记:第十五讲 (四) 编写一个基于MFC对话框的聊天程序
- 微软windows10易升_微软官网下载与安装windows10系统的操作步骤
- 基于Matlab高斯光束菲涅耳衍射的模拟
- VOC数据集解析 VOC2007解析
- Windows server 2008 如何下载镜像及其安装到VM内的步骤
- 《追风筝的人》的寓意读后感3200字:
- mybatis开发神器mybatis plus
- 美团工作10个月心得
- 巨准SCRM私域案例拆解丨看看WonderLab如何霸屏朋友圈
- 股市中什么是多头、空头
- python数码时钟代码_micro:bit 编程模拟时钟表盘
- Shannon 香农编码 信息论实验 c++
热门文章
- 什么是蜘蛛统计 有什么作用?
- Gym - 102263 B - Road to Arabella
- Unity3d开发之二十:闪电
- MAMP Pro 6 mac强大的本地服务器环境软件套装
- Matlab常用命令汇总
- win10+Docker Toolbox+mysql
- Day04 关键字、标识符、变量及运算符
- git恢复commit过的代码
- 试题 基础练习 数的读法
- 回文是指正读反读均相同的字符序列,如“abba“和“abdba“均是回文,但“good“不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)