本文主要讲解张量的定义,以及如何使用 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----张量生成相关推荐

  1. Pytorch学习笔记总结

    往期Pytorch学习笔记总结: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 Pytorch系列目录: PyTorch学习笔记( ...

  2. PyTorch学习笔记2:nn.Module、优化器、模型的保存和加载、TensorBoard

    文章目录 一.nn.Module 1.1 nn.Module的调用 1.2 线性回归的实现 二.损失函数 三.优化器 3.1.1 SGD优化器 3.1.2 Adagrad优化器 3.2 分层学习率 3 ...

  3. PyTorch学习笔记(二):PyTorch简介与基础知识

    往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...

  4. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  5. pytorch学习笔记(二):gradien

    pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. pytorch 学习笔记目录

    1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...

  8. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  9. 深度学习入门之PyTorch学习笔记:多层全连接网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...

最新文章

  1. iOS开发8:使用Tool Bar切换视图
  2. UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索
  3. main函数与命令行参数
  4. C++语言之父 Bjarne Stroustrup 简介
  5. shell 杂记一(笨鸟)
  6. (转)腾讯2011.10.15校园招聘会笔试题
  7. 全栈深度学习第2期: 开发套件与工具篇
  8. JavaScript 图片切换展示效果
  9. 单片机c语言必背代码_单片机编程用C语言还是汇编?
  10. linux下文件下载中文,LINUX环境下资源下载中文目录及中文文件名称问题
  11. PriorityQueue优先队列
  12. 制作可保存配置的U盘版BT4(BackTrack4 )
  13. Retina显示屏-揭秘移动端的视觉稿通常会设计为传统PC的2倍
  14. 射频识别技术软硬件系统研制
  15. 南京市城镇居民基本医疗保险暂行办法实施细则
  16. 简化电脑操作,不让多余操作浪费你的生命
  17. ssm基于微信小程序的游泳馆管理系统 uinapp 计算机毕业设计
  18. 如何优雅实现自动化部署
  19. SQL 中的时间格式
  20. 企业级360°全方位用户画像:环境搭建[五]

热门文章

  1. java构建器出错nullpoint_空指针错误 java.lang.NullPointerException 浅谈
  2. 极限交付:软件项目外包成功的保障
  3. 航空专场 | 无人机设计仿真流程讲解与案例实操
  4. Session实现网站在线人数统计
  5. 如何实现一个脚本语言?
  6. 配置 Visual Studio 2019以进行 iOS 开发
  7. Python实验报告一 python基础试题练习
  8. 2021年中国互联网广告市场规模、竞争格局与发展趋势分析,行业发展稳中向好「图」
  9. chatgpt 镜像版
  10. 架构设计(7)—如何设计一个架构