cpu消耗 pytorch_Pytorch学习笔记之Pytroch 基础

本文是PyTorch学习笔记,主要介绍张量的基础知识,包括张量的创建、查看大小、多维张量、标量与元素张量的生成、基本类型、Numpy转换及设备间转换。还涵盖了张量的初始化和常用操作方法,如随机初始化、填充、求最大值、求和以及加法等。
摘要由CSDN通过智能技术生成

c1a010e447c0b994424ad2514233d13a.png
SCDN博客: https:// blog.csdn.net/weixin_41 923658
掘金:汤姆鱼 的个人主页 - 掘金
简书:汤姆鱼 - 简书
微信公众号:「汤姆鱼」

-------------------------------------手动分割线-------------------------------------------

1、张量(Tensor)

张量的英文是 Tensor, 它是 PyTorch 里基础的运算单位, 与 Numpy 的 ndarray 相同表示的是一个多维矩阵。与 ndarray 的最大区别就在于,PyTorch 的 Tensor 可以在 GPU 上运行,而 numpy 的 ndarray 只能在 CPU 上运行,在 GPU 上运行大大加快了运算速度。

(1)、首先要引入相关的包;

14993357508082a173db66d4453c2ff0.png

(2)、生成一个简单的张量;

4d8349adaa97d19d76fe17f7f0dcaa44.png

注:rand() 函数的作用:

以给定的形状(取决于 rand函数的参数设置)创建一个数组,并在数组中加入在[0, 1] 之间均匀分布的随机样本。

与randn() 函数的区别:

randn() 函数以给定的形状创建一个数组,数组元素符合标准正态分布(0, 1)。

(3)、查看张量(矩阵)的大小;

4abdef0f66a22a65dd44d7284f858db4.png

a、可以使用shape属性查看;

 x.shape;

b、可以使用size()函数,返回结果;

 x.size();

张量 (Tensor) 是一个定义在一些向量空间和一些对偶空间的笛卡尔积上的多重线性映射,其坐标是 [n] 维空间内,有 [n] 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则做线性变换。 R 称为该张量的秩或阶 (与矩阵的秩和阶均无关系)。

(4)、生成一些多维的张量;

b98c8dbecf60c3c9fb507d08e7864bc2.png

解释:

  • torch.rand(2, 3, 4, 5) 生成的多维矩阵,你可以把它想象成一个文件夹下面存放了一些图片,究竟是什么样的图片呢?数量有多少?

2 --- 表示这个文件夹里面存放图片的数量;

3 --- 表示这张图片的通道数,比如(R、G、B);

4, 5 --- 表示这张图片的大小 4 *5;

  • 在同构的意义下,第零阶张量 (r = 0) 为标量(Scalar), 第一阶张量 (r =1) 为向量(vector) ,第二阶张量( r = 2)为 矩阵,第三阶以上的统称为多维张量。

理解:

r = 0, 标量(Scalar)其实就是一个实数,如 a, b….

r = 1, 向量(Vector) 又称为矢量,是一个一维数组,如 x =

r = 2, 矩阵(matrix)是一个二维数组,如 x =

r = 3 , 张量其实就是标量、向量和矩阵在多维空间( r >= 3) 中的推广,即多维数组。如: x =

9e835b0dbcc993670e85bc1cab1dc1d3.png

(5)、生成一个标量;

2e1872b5b5787e014beb77dd5f22c447.png

对于标量直接使用 .item() 从中取出对应 的 python 对象的数值

b8200c057163cf5cee90e3a52ee512a0.png

(6)、生成一个元素的张量;

390cf8046af8c852876d22c75712cca4.png

ps: 注意对比生成标量和生成一个元素张量的不同

对于只有一个元素的张量也可以使用 .item() 取 Python 对象的值

ebabee20bcc8871e7eeb5e5c0009ce4d.png

2、基本类型

  • 整型:

64位:torch.LongTensor.

将 tensor 转换成 64 位整型

e65870a27b2da670a99047a101e8b927.png

32位:torch.FloatTensor.

将 tensor 转换成 32 位整型

76496996972a4167120b6a22b533d2b0.png

16位:torch.IntTensor.

将 tensor 转换成 16 位整型

3578c20ba313f5733b257f0629fbd2d7.png
  • 浮点型:

64位: torch.DoubleTensor.

将 tensor 转换成 64 位浮点型

a61f8040350f8b3bbc4e7815aa2626ef.png

32位 :torch.FloatTensor.

将 tensor 转换成 32 位 浮点型

f76a26336c492788c8391d1245515d6f.png
  • Char 字符型:torch.CharTensor.

将 tensor 转换成 char 型

0ce6a0cefd3c7c629cfd5955d194573e.png
  • byte 字节型:torch. ByteTensor.

将 tensor 转换成 byte 型

ba9f4cbf706584caa0bc7ee65a02da09.png

3、Numpy 转换

  • 使用 numpy 方法将 Tensor 转化为 ndarray

aaa0976f3636234521abede637832870.png
  • 将 numpy 转化成 Tensor

fc84a650145ed6d1b23beaa734909792.png

Tensor 和 numpy 对象共享内存,所以他们之间的转换很快,而且几乎不会消耗什么资源。但这也意味着,如果其中一个变了,另外一个也会随之改变。

4、设备间的转换

一般情况下可以使用 cuda 方法将 tensor 移动到 gpu, 这步操作需要 cuda 设备支持

  • 在 cpu 上随机生成一个数组,并在数组中加入 [0,1] 之间的均匀分布随机样本

3e299bf27061396c627f4b2063a6dd62.png
  • 将 tensor 从 cpu 上移动到 gpu 上

0f9a5aaee8c31b16c05344b83b8bf8dc.png
  • 使用 .cpu() 方法将 tensor 移动到 cpu 上

46bbf9fa93a0aecd7a223f6ad9d4a303.png

5、初始化

  • 初始化,使用 [0,1] 均匀分布随机初始化二位数组

70d460d2969f751e151c6a42c0ef1d30.png
  • 初始化,使用 1 填充

ddb916341cb4222521df6955e8c37879.png
  • 初始化,使用 0 填充

5da120604d2f9cce0a1dce587b036510.png
  • 初始化,对角线为 1,其他为 0

c2e0e05f3f281cab05a1bd7f581b2453.png

6、张量操作常用方法

PyTorch 中对张量的操作 api 和 Numpy 非常相似,如果熟悉 Numpy 中的操作,那么他们二者基本一致;

  • 生成标准的正态分布的二维数组

555f4a803921001f51f05b95d54d4d9d.png
  • 沿着行取最大值

ea00414bc97d4d50e9bdd93c17fe5877.png
  • 每行求和

e3b6dcebf6146704517d205b929208ef.png
  • 矩阵 a + b

bf3da9403261ccce8b90308740ac23d8.png
  • 以 _ 为结尾的,均会改变调用值

33b101cd0b811f39912a595dc16aa9e9.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值