Pytorch学习笔记01----张量生成
本文主要讲解张量的定义,以及如何使用 PyTorch 完成张量的加、减、乘、除、切片和重塑等操作,以及如何将变量定义到GPU中。
张量生成
- 一、张量的创建
- 1.torch.empty
- 2.torch.rand
- 3.torch.zeros\ones
- 4.x.dtype
- 5.torch.tensor
- 6.requires_grad
- 二、张量的四则运算
- 1.张量的加法
- 2.张量的减法
- 3.张量的乘法
- 4.张量的除法
- 三、张量的切片
- 四、张量的重塑
- 五、NumPy 与 Tensor
- 1.Tensor2NumPy
- 2.NumPy2Tensor
- 六、GPU 上创建张量
- 1.在GPU上直接创建张量
- 2.将变量放到GPU上进行运算
import torch
一、张量的创建
1.torch.empty
利用torch.empty()
初始化指定的张量大小
,如果不指定值的话,内容为随机值。传入的参数为想创建的张量大小
。
x.size()可以查看某个张量的大小
x=torch.empty(1) #scalar,大小为1*1的张量
print(x.size())
x=torch.empty(3) #vector,1D,大小为1*3的张量
print(x.size())
x=torch.empty(2,3) #matrix,2D,大小为2*3的张量
print(x.size())
x=torch.empty(2,2,3) #tensor,3D,大小为2*2*3的张量
print(x.size())
输出结果如下:
torch.Size([1])
torch.Size([3])
torch.Size([2, 3])
torch.Size([2, 2, 3])
2.torch.rand
随机初始化值在0-1之间的张量(服从均匀分布),可以使用torch.rand(size)
。
torch.rand(5,3)#初始化5*3大小的0-1之间的张量
输出结果如下:
tensor([[0.7578, 0.4057, 0.2106],[0.1077, 0.9233, 0.4721],[0.4090, 0.6145, 0.4688],[0.0066, 0.2052, 0.0865],[0.0403, 0.0515, 0.3843]])
3.torch.zeros\ones
初始化全为 1 或者全为 0 的张量,可以使用 torch.zeros(size)
和torch.ones(size)
:
x=torch.zeros(5,3)
y=torch.ones(5,3)
print(x)
print(y)
输出结果如下:
tensor([[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]])
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]])
4.x.dtype
x.dtype可以查看x中值的具体类型,也可以在初始化的时候传入指定的数据类型。
x=torch.zeros(5,3,dtype=torch.float16)
print(x)
print(x.dtype)
输出结果如下:
tensor([[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]], dtype=torch.float16)
torch.float16
5.torch.tensor
创建指定值的张量,我们可以使用 torch.tensor(list)
,list 可以为 NumPy 中的一个列表。
x=torch.tensor([5.5,3.0])
print(x)
print(x.size())
print(x.dtype)
输出结果如下:
tensor([5.5000, 3.0000])
torch.Size([2])
torch.float32
6.requires_grad
如果想要定义的张量能够自动计算梯度,那么我们就需要将参数 requires_grad
置为 True
。
torch.tensor([5.5,3.0],requires_grad=True)
输出结果如下:
tensor([5.5000, 3.0000], requires_grad=True)
二、张量的四则运算
1.张量的加法
y=torch.rand(2,2)
x=torch.rand(2,2)
z=x+y
print(x)
print(y)
print(z)
输出结果如下:
tensor([[0.2612, 0.2316],[0.3099, 0.8368]])
tensor([[0.5535, 0.4303],[0.2704, 0.3087]])
tensor([[0.8147, 0.6619],[0.5804, 1.1455]])
2.张量的减法
使用 - 或者 .sub 都可以表示张量减法。
z=x-y
print(z)
z=torch.sub(x,y)
print(z)
输出结果如下:
tensor([[-0.2922, -0.1986],[ 0.0395, 0.5280]])
tensor([[-0.2922, -0.1986],[ 0.0395, 0.5280]])
3.张量的乘法
张量乘法(利用 * 或者 torch.mul表示):
z=x*y
print(z)
z=torch.mul(x,y)
print(z)
输出结果如下:
tensor([[0.1446, 0.0997],[0.0838, 0.2584]])
tensor([[0.1446, 0.0997],[0.0838, 0.2584]])
4.张量的除法
张量除法(使用 / 或者 torch.div 表示):
z=x/y
print(z)
z=torch.div(x,y)
print(z)
三、张量的切片
和 NumPy 的切片类似,如下:
x=torch.rand(5,3)
print(x)
print(x[1,1])# 第一个值表示第一维(即行号),第二个值表示第二维(即列号)
print(x[:,0])# 所有的行中的第 1 列
print(x[1,:])# 第 2 行中所有的列
输出结果如下:
tensor([[0.5549, 0.4097, 0.4717],[0.9115, 0.7156, 0.3842],[0.8097, 0.1971, 0.0908],[0.6428, 0.7458, 0.0578],[0.1143, 0.2395, 0.0955]])
tensor(0.7156)
tensor([0.5549, 0.9115, 0.8097, 0.6428, 0.1143])
tensor([0.9115, 0.7156, 0.3842])
四、张量的重塑
重塑的意思就是将原张量的形状进行变换,即元素总个数不变的情况下改变行数和列数,使用 torch.view(size)
类似于 numpy.reshape
。
x=torch.rand(4,4)
y=x.view(16)#指定改变后的大小
z=x.view(2,8)
print(x.size(), y.size(), z.size())
输出结果如下:
torch.Size([4, 4]) torch.Size([16]) torch.Size([2, 8])
当 x x x 的大小为 12×23×32 ,而我们想把 x x x 转为 2 × m 2×m 2×m 的大小时,我们就必须手动算出 12×23×32 的值,然后除以 2,进而得到 m m m 的值。
为了避免这种情况,我们可以将 m m m所在位置赋为 -1。计算机看到 -1 时,会自动使用 12×23×32÷2 的值来替换 -1:
x = torch.randn(12, 23, 32)
y = x.view(2, -1) # 将需要计算的那个维度直接用 -1 表示 12*23*32/2 的值
x.size(), y.size()
#注意:一次切片中只能有一个位置值 -1 。
输出结果如下:
(torch.Size([12, 23, 32]), torch.Size([2, 4416]))
五、NumPy 与 Tensor
1.Tensor2NumPy
可以使用 tensor.numpy()
将 Tensor
类型的变量转为 NumPy
类型:
a=torch.ones(5)
print(a)
b=a.numpy()
print(b)
print(type(b))
输出结果如下:
tensor([1., 1., 1., 1., 1.])
[1. 1. 1. 1. 1.]
<class 'numpy.ndarray'>
2.NumPy2Tensor
可以使用 torch.from_numpy()
将 NumPy
类型的变量转为 Tensor
:
import numpy as np
a=np.ones(5)
b=torch.from_numpy(a)
print(a)
print(b)
输出结果如下:
[1. 1. 1. 1. 1.]
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
六、GPU 上创建张量
默认情况下,所有的张量都是在 CPU 上创建的,但是你也可以使用 GPU 创建它,或者将 CPU 创建的向量移动到 GPU 中。
我们可以通过 torch.cuda.is_available()
命令,查看本地环境时候支持 GPU (True 表示支持 False 表示不支持):
torch.cuda.is_available()
输出结果如下:
True
1.在GPU上直接创建张量
device = torch.device("cuda")
y = torch.ones_like(x, device=device) # 在 GPU 上直接创建张量
z = torch.zeros_like(x, device=device)
print(x)
print(y)
print(z)
输出结果如下:
tensor([[ 0.4948, -1.2999, 0.5415, 1.1467],[-2.5609, 1.6418, -0.0849, 0.9079],[-1.1307, -1.0002, -1.7547, -0.2796],[-1.3649, -0.1008, -2.2295, 1.1563]], device='cuda:0')
tensor([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]], device='cuda:0')
tensor([[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.],[0., 0., 0., 0.]], device='cuda:0')
2.将变量放到GPU上进行运算
x = torch.randn(4, 4)
device = torch.device("cuda")
x = x.to(device) # 将张量移动到 GPU
print(x)
输出结果如下:
tensor([[ 0.4948, -1.2999, 0.5415, 1.1467],[-2.5609, 1.6418, -0.0849, 0.9079],[-1.1307, -1.0002, -1.7547, -0.2796],[-1.3649, -0.1008, -2.2295, 1.1563]], device='cuda:0')
Pytorch学习笔记01----张量生成相关推荐
- Pytorch学习笔记总结
往期Pytorch学习笔记总结: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 Pytorch系列目录: PyTorch学习笔记( ...
- PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard
文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...
- PyTorch学习笔记(二):PyTorch简介与基础知识
往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- pytorch学习笔记(二):gradien
pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030
- PyTorch学习笔记(二)——回归
PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...
- pytorch 学习笔记目录
1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...
- 深度学习入门之PyTorch学习笔记:卷积神经网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...
- 深度学习入门之PyTorch学习笔记:多层全连接网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...
最新文章
- iOS开发8:使用Tool Bar切换视图
- UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索
- main函数与命令行参数
- C++语言之父 Bjarne Stroustrup 简介
- shell 杂记一(笨鸟)
- (转)腾讯2011.10.15校园招聘会笔试题
- 全栈深度学习第2期: 开发套件与工具篇
- JavaScript 图片切换展示效果
- 单片机c语言必背代码_单片机编程用C语言还是汇编?
- linux下文件下载中文,LINUX环境下资源下载中文目录及中文文件名称问题
- PriorityQueue优先队列
- 制作可保存配置的U盘版BT4(BackTrack4 )
- Retina显示屏-揭秘移动端的视觉稿通常会设计为传统PC的2倍
- 射频识别技术软硬件系统研制
- 南京市城镇居民基本医疗保险暂行办法实施细则
- 简化电脑操作,不让多余操作浪费你的生命
- ssm基于微信小程序的游泳馆管理系统 uinapp 计算机毕业设计
- 如何优雅实现自动化部署
- SQL 中的时间格式
- 企业级360°全方位用户画像:环境搭建[五]