device 查看tensor_Tensor数据操作
* torch.Tensor 存储和变换数据的工具
* Tensor与Ndarray多维数组类似,可提供GPU计算和自动求梯度
* 标量:0纬张量,一个数字
* 向量:1纬张量,[ ]
* 矩阵:2纬张量,[ [ ] ]
首先导入torch,查看版本号
importtorch#打印torch版本
print(torch.__version__)#查看是否支持GPUtorch.cuda.is_avaliable()
代码运行后的结果是:1.4.0
True
1.创建Tensor
1.11 直接创建
* torch.tensor(value)
* value:可以是任何维度的张量
print("创建一个标量5")
x= torch.tensor(5)print("创建一个向量[]")
y= torch.tensor([2,3])print("创建一个矩阵[ [ ] ]")
z= torch.tensor([[1,2],
[2,3]])print(x)print(y)print(z)
输出结果是:
创建一个标量5
创建一个向量[]
创建一个矩阵[ [ ] ]
tensor(5)
tensor([2, 3])
tensor([[1, 2],
[2, 3]])
1.2使用方法创建
* torch.empty(shape,dtype = type):创建未初始化的Tensor,可指定数据类型,dtype参数可省略
* torch.rand(shape) :创建随机矩阵
* torch.zeros(shape):创建0矩阵
* 创建维度均为2纬矩阵
print("创建二维未初始化矩阵")
A= torch.empty((2,2))print(A)print("创建随机矩阵")
B= torch.rand((2,2))print(B)print("创建0矩阵")
C= torch.zeros((2,2))print(C)
输出结果是:
创建二维未初始化矩阵
tensor([[0.0000e+00, 1.4279e+00],
[-9.3980e-11, 4.5908e-41]])
创建随机矩阵
tensor([[0.3857, 0.0058],
[0.1388, 0.9339]])
创建0矩阵
tensor([[0., 0.],
[0., 0.]])
1.3通过现有的Tensor创建
* matrix.new_ones(shape,dtype) 可以改变维度
* torch.randn_like(matirx,dtype)
print("将原本2*2未初始化矩阵进行重新创建")
B= B.new_ones(5,3)print(B)print("将原本2*2未初始化矩阵进行重新创建")
A= torch.randn_like(A, dtype =torch.float)print(A)
输出结果是:
将原本2*2未初始化矩阵进行重新创建
tensor([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
将原本2*2未初始化矩阵进行重新创建
tensor([[0.1454, -0.1173],
[-0.7503, 0.5255]])
1.4Tensor的基本方法
* matrix.shape: 获取Tensor形状
* matirx.size():获取Tensor形状 返回一个tuple,支持tuple的所有操作
print("获取B矩阵形状")print(B.shape)print(B.size())
输出结果是:
获取B矩阵形状
torch.Size([5, 3])
torch.Size([5, 3])
2 Tensor操作
2.1 算法操作
2.11 加法操作
* matrix1 + matirx2
* torch.add(matrix1, matrix2, out = A) out指定输出参数,可省略
* inplace matrix1.add_(matrix2) == (matirx1 += matrix2)
print("使用 + 完成加法操作")print(A +C)print("使用torch.add完成加法操作")print(torch.add(A,C))print("使用inplace完成加法操作")print(C.add_(A))
输出结果是:
使用+完成加法操作
tensor([[0.1454, -0.1173],
[-0.7503, 0.5255]])
使用torch.add完成加法操作
tensor([[0.1454, -0.1173],
[-0.7503, 0.5255]])
使用inplace完成加法操作
tensor([[0.1454, -0.1173],
[-0.7503, 0.5255]])
2.1.2 索引
* 类似于Numpy
* 索引结果与原数据共享内存
A = torch.rand(5,5)print('查看创建Tensor')print(A[1][1])
A[1][1] = 5
print("查看A矩阵第一行第一列是否为5")print(A[1][1])
输出结果是:
查看创建Tensor
tensor(0.6124)
查看A矩阵第一行第一列是否为5
tensor(5.)
2.1.3 改变形状
* marix.clone() 克隆新副本,解决共享内存带来的问题
* matrix.view(shape) view() 前后共享data
* matrix.reshape(shape)
#查看clone与变量赋值的区别
print("查看A变量地址")print(id(A))
A_cl=A.clone()print('查看克隆新副本地址')print(id(A_cl))
A_an=Aprint('查看变量重新赋值后的地址')print(id(A_an))
输出结果是:
查看A变量地址2337547400576查看克隆新副本地址2337538344512查看变量重新赋值后的地址2337547400576
note:这里主要是解释共享data的问题。直接view()的话维度改变,操作的是同一内存的数据。不会生成新的维度的数据。
* 变量赋值相当于引用,地址不变,只想同一块内存
* clone()操作会重新申请内存空间
* matrix.item() 将标量Tensor转化为number
* https://pytorch.org/docs/stable/tensors.html Tensor操作链接
2.1.4 Tensor的广播机制
* 自动使得运算的Tensor相同的操作
* 首先会比较最靠右的维度,如果最靠右的维度相等或其中一个为 1,则认为此维度相等;
* 再继续向左比较,如果一直满足,则认为两者兼容;
* 最后,分别在对应维度上发生广播,以此补齐直到维度一致;
x = torch.rand(4 , 6)
y= torch.rand(4, 1)print(torch.add(x , y))
输出结果是:
tensor([[0.6108, 0.1842, 0.9873, 0.9042, 0.2456, 0.4298],
[1.0251, 0.6726, 1.2724, 1.2861, 1.1256, 0.5654],
[1.0223, 0.3473, 0.5952, 0.3701, 0.4500, 0.4993],
[0.0542, 0.9524, 0.1668, 0.5762, 0.0671, 0.4689]])
2.1.5 Tensor与Numpy的相互转换
* tensor.numpy() 可将Tensor转为ndarray数据
a = torch.rand(3,2)print(id(a))
b=a.numpy()print(id(b))print(a)print(b)
输出结果为:2337547166400
2337547429088tensor([[0.3145, 0.9862],
[0.7604, 0.9342],
[0.3104, 0.7312]])
[[0.31446308 0.9861587]
[0.7603721 0.9341993]
[0.31042498 0.73123205]]
Numpy转为Tensor
* torch.from_numpy(array)
* torch.Tensor()
importnumpy as np
c=torch.from_numpy(b)
d=torch.Tensor(b)print(type(c))print(type(d))
2.1.6 Tensor on GPU
* .to("cuda") 将Tensor在GPU上运算
x.to("cuda")
* .to(device) 将Tensor在GPU运算
torch.device("cuda")
x.to(device)
* .to("cpu") 将Tensor在CPU上运算
验证GPU的运算速度
%%time #jupyter notebook中的魔法语句,可以输出当前代码块的运行速度print("使用device")
device= torch.device("cuda")
x= torch.rand(200,100).to(device)
y= torch.rand(200,100).to(device)print(x + y)
输出结果是:
使用device
tensor([[1.3311, 1.7433, 1.1089, ..., 0.8775, 1.1430, 0.4877],
[1.1953, 0.3628, 0.6479, ..., 0.4781, 0.9154, 1.3447],
[1.2134, 0.5482, 1.7713, ..., 0.9025, 1.1786, 0.2083],
...,
[0.9276, 0.8605, 0.9905, ..., 0.9992, 1.1613, 0.8636],
[1.2191, 0.6350, 0.9921, ..., 1.7540, 1.0139, 1.2921],
[1.2137, 0.9510, 0.9126, ..., 0.8433, 0.5871, 1.0881]],
device='cuda:0')
Wall time:6.45 s
验证CPU运算速度
%%timeprint("使用CPU")
x= torch.rand(200,100).to("cpu")
y= torch.rand(200,100).to("cpu")print(x + y)
输出结果是:
使用CPU
tensor([[1.4920, 1.1891, 0.0936, ..., 0.5056, 1.6395, 1.0162],
[1.4211, 0.9837, 1.1501, ..., 1.2990, 0.7121, 0.3505],
[1.1503, 1.0263, 1.4055, ..., 0.6856, 0.3320, 0.7620],
...,
[0.4615, 1.0520, 1.3409, ..., 1.1014, 1.0806, 0.9630],
[0.9770, 1.4159, 1.6652, ..., 0.9515, 1.2479, 1.2459],
[0.7622, 0.9159, 0.9734, ..., 0.5249, 0.1216, 0.6906]])
Wall time:112 ms
查看同样维度矩阵计算GPU与CPU的速度差异
print("GPU 比 CPU 的运算速度块: %.2f 倍" %(112 / 6.45))
输出结果是:
GPU 比 CPU 的运算速度块:17.36 倍
device 查看tensor_Tensor数据操作相关推荐
- python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- 2019-7-26 [MySQL] 安装与介绍 语句分类/语法 数据类型 DDL数据定义:创建/查看/删除/使用 DML数据操作:增删改 主键约束 自动增长列 非空约束 默认值 Navicat
文章目录 0.知识回顾 1.数据库介绍 1.1 数据库概述 1.1.1 什么是数据库 1.1.2 什么是数据库管理系统 1.1.3 数据库与数据库管理系统的关系 1.2 数据库表 1.3 表数据 1. ...
- linux命令查看内存数据,Linux 查看内存条数据和大小命令
查看内存条数据和大小命令: sudo dmidecode | grep -A16 "Memory Device$" 需要root 权限.. [life@localhost mp3b ...
- Redis数据库搭建主从同步(主从概念、主从配置、主从数据操作)
1. 主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读 ...
- 命令行客户端MySQL基本命令的使用(登录、登出、数据库操作的SQL语句、表结构的SQL语句、表数据操作的SQL语句)
1. 登录和登出数据库 登录数据库: 输入下面命令: mysql -uroot -p 说明: -u 后面是登录的用户名 [写成-u root也是可以的] -p 后面是登录密码, 如果不填写, 回车之 ...
- MySQL基础篇:数据操作语言DML
1.概述 数据操作语言(DML)用于插入.修改.删除.查询数据记录,包括以下SQL语句: INSERT:添加数据到数据库中 UPDATE:修改数据库中的数据 DELETE:删除数据库中的数据 2.插入 ...
- Python—pandas中DataFrame类型数据操作函数
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFram ...
- 表操作,数据操作,单表查询,python操作数据库
1.表操作 创建 create table 删除 drop table 查看表结构 desc 表/show create table 表 修改 alter table 表名 rename 新表名 al ...
- MySQl的库操作、表操作和数据操作
一.库操作 1.1库的增删改查 (1)系统数据库: performance_schema:用来收集数据库服务器的性能参数,记录处理查询时发生的各种事件.锁等现象 mysql:授权库,主要存储系统用户的 ...
最新文章
- 从PPT到Word,用Python轻松实现办公自动化
- 3.Vue 条件渲染
- java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)
- 是什么让支付宝网络诈骗案占比逐渐下降?
- Hadoop学习笔记一:单节点安装
- 云计算时代的DCI技术
- 31、栈的压入、弹出序列(Python)
- nexus下载地址分享
- jmeter使用详解
- word一键生成ppt 分页_一键实现Word转PPT的三种方法评测
- 春节假期最值得阅读的10本书
- 起风了数字简谱用计算机,起风了钢琴简谱-数字双手-买辣椒也用券
- node拉取微信权限,实现自定义分享微信朋友圈等操作
- 分层抽样不按比例如何加权_按比例分层抽样和定额抽样的区别?
- android自带下拉阻尼动画,Android实现简单的下拉阻尼效应示例代码
- Luogu P5037 抓捕
- C++ 资源大全(各种库)---------伯乐在线
- 第四章 微服务容错Resilience4j
- 【PyTorch深度学习实践】P9 kaggle otto商品分类作业(含注释)
- iphone4s照片删掉了如何恢复