PyTorch框架学习二——基本数据结构(张量)

PyTorch框架学习二——基本数据结构(张量)

  • 一、什么是张量?
  • 二、Tensor与Variable(PyTorch中)
    • 1.Variable
    • 2.Tensor
  • 三、Tensor的创建
    • 1.直接创建Tensor
      • (1)torch.tensor()
      • (2)torch.from_numpy()
    • 2.依据数值创建
      • (1)torch.zeros()
      • (2)torch.zeros_like()
      • (3)torch.ones()
      • (4)torch.ones_like()
      • (5)torch.full()
      • (6)torch.full_like()
      • (7)torch.arange()
      • (8)torch.linspace()
      • (9)torch.logspace()
      • (10)torch.eye()
    • 3.依据概率分布创建张量
      • (1)torch.normal()
      • (2)torch.randn()
      • (3)torch.randn_like()
      • (4)torch.rand()
      • (5)torch.rand_like()
      • (6)torch.randint()
      • (7)torch.randint_like()
      • (8)torch.randperm()
      • (9)torch.bernoulli()

一、什么是张量?

先来看一些数学上常见的名词:

标量:0维张量
向量:1维张量
矩阵:2维张量

所以,张量(Tensor)是一个多维数组,是上述提及的标量、向量和矩阵的高维拓展

二、Tensor与Variable(PyTorch中)

Variable是PyTorch 0.4.0之前的一种数据类型,PyTorch 0.4.0开始,Variable已经并入了Tensor,所以已经不再需要用到Variable,但是为了学习的一个循序渐进的过程,我们还是先来看一下Variable这个数据类型。

1.Variable

是torch.autograd中的数据类型,主要用于封装Tensor,使得Tensor可以自动求导。

Variable这种数据类型包括了五种属性,分别如下所示:

  1. data:被包装的Tensor
  2. grad:data的梯度
  3. grad_fn:创建Tensor的Function,这是自动求导的关键
  4. requires_grad:指示是否需要计算梯度
  5. is_leaf:指示是否是叶子结点(张量)

Variable可以看成是给Tensor加上了四个与梯度相关的属性。

2.Tensor

PyTorch 0.4.0 版本开始,Variable并入Tensor。Tensor在Variable的基础上又添加了三个与数据相关的属性,一共有八个属性,分别如下所示:

  1. data:被包装的Tensor
  2. dtype:张量的数据类型,如torch.FloatTensor、torch.cuda.FloatTensor等
  3. shape:张量的形状/维度,如(64,3,224,224)
  4. device:张量所在设备,GPU/CPU,是加速计算的关键
  5. grad:data的梯度
  6. grad_fn:创建Tensor的Function,这是自动求导的关键
  7. requires_grad:指示是否需要计算梯度
  8. is_leaf:指示是否是叶子结点(张量)

前四个属性与数据相关,后四个属性与梯度求导相关。

三、Tensor的创建

一般Tensor的创建有三种方式:直接创建、依数值创建和依概率分布创建,下面分别进行介绍:

1.直接创建Tensor

这种创建方式一般是将列表(list)、数组(ndarray)封装数据的形式直接转变为Tensor,常用的有torch.tensor()、torch.from_numpy()。

(1)torch.tensor()

功能:从data创建tensor

先给出官方的函数形式以及参数:

torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)

下面看一下所有的参数:
在这里插入图片描述

  1. data:要转变为张量的数据,可以是列表、元组、numpy的ndarry、散点和其他数据类型。
  2. dtype:(可选)张量的数据类型,默认为None,返回data自己的数据类型。
  3. device:(可选)张量的计算设备,默认为None,使用现有的设备,可以是cuda/cpu。
  4. requires_grad:(布尔类型,可选)如果autogard需要记录张量的运算,即是否需要计算data的梯度,默认为False。
  5. pin_memory:(布尔类型,可选)如果设置,张量将被分配到锁页内存中,只为CPU的张量工作,默认为False。
arr = np.ones((3, 3))
print("ndarray数组:", arr)
print("ndarray的数据类型:", arr.dtype)# t = torch.tensor(arr, device='cpu')
t = torch.tensor(arr)
print(t)tens = torch.tensor([1, 2], dtype=torch.int64)
print(tens.data, tens.dtype)

在这里插入图片描述

(2)torch.from_numpy()

功能:从numpy.ndarray创建tensor,相比tensor(),数据类型只能是numpy.ndarray。

torch.from_numpy(ndarray)

它只有一个参数,就是输入的ndarry,但是它需要注意的是:torch.from_numpy()创建的tensor与原ndarry是共享内存的,当修改其中一个数据时,另一个也将会被改动。

arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)
print("numpy array: ", arr)
print("tensor : ", t)

在这里插入图片描述

print("\n修改arr")
arr[0, 0] = 0
print("numpy array: ", arr)
print("tensor : ", t)

在这里插入图片描述

print("\n修改tensor")
t[0, 0] = -1
print("numpy array: ", arr)
print("tensor : ", t)

在这里插入图片描述

2.依据数值创建

(1)torch.zeros()

功能:依据size创建全0张量

torch.zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

看一下所有的参数:
在这里插入图片描述

  1. size:定义输出张量的形状/维度,可以是元组或者列表,如(3,3),(3,3,3)。
  2. out:(张量,可选)输出张量。
  3. dtype:(可选)张量的数据类型,默认为None,使用全局默认类型。
  4. layout:(可选)内存中的布局形式,有strided,sparse_coo等,默认为torch.strided。
  5. device:同上。
  6. requires_grad:同上。
>>> torch.zeros(2, 3)
tensor([[ 0.,  0.,  0.],[ 0.,  0.,  0.]])>>> torch.zeros(5)
tensor([ 0.,  0.,  0.,  0.,  0.])

(2)torch.zeros_like()

功能:依据input形状创建全0张量

torch.zeros_like(input, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format)

看一下所有的参数:
在这里插入图片描述

  1. input:(张量)input的尺寸/维度决定输出张量的维度。
  2. dtype:(可选)默认为None,与input的类型一致。
  3. layout:(可选)默认为None,与input的layout一致。
  4. device:(可选)默认为None,与input的device一致。
  5. requires_grad:(布尔,可选)同上。
  6. memory_format:(可选)张量的存储格式。
>>> input = torch.empty(2, 3)
>>> torch.zeros_like(input)
tensor([[ 0.,  0.,  0.],[ 0.,  0.,  0.]])

(3)torch.ones()

功能:依据size创建全1张量

参数与torch.zeros()类似

(4)torch.ones_like()

功能:依据input形状创建全1张量

参数与torch.ones()类似

(5)torch.full()

功能:创建一个尺寸为size的张量,里面每个元素的值全为fill_value

torch.full(size, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

参数如下:
在这里插入图片描述

  1. size:维度
  2. fill_value:张量内要填充的值
  3. 其他参数都同上
>>> torch.full((2, 3), 3.141592)
tensor([[ 3.1416,  3.1416,  3.1416],[ 3.1416,  3.1416,  3.1416]])

(6)torch.full_like()

功能:依据input的尺寸创建一个张量,值全为full_value。

torch.full_like(input, fill_value, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format)

在这里插入图片描述

(7)torch.arange()

功能:创建等差的一维张量。注意数值区间为 [ start, end )
在这里插入图片描述

torch.arange(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

  1. start:数列起始值,默认为0。
  2. end:数列“结束值”。
  3. step:数列公差,默认为1。
  4. 其他参数同上。
>>> torch.arange(5)
tensor([ 0,  1,  2,  3,  4])
>>> torch.arange(1, 4)
tensor([ 1,  2,  3])

(8)torch.linspace()

功能:创建均分的一维张量。注意数值区间为 [ start, end ]。

torch.linspace(start, end, steps=100, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

  1. start:数列起始值。
  2. end:数列结束值。
  3. steps:在start和end之间要采样的个数,默认为100。
  4. 其他参数同上。
>>> torch.linspace(3, 10, steps=5)
tensor([  3.0000,   4.7500,   6.5000,   8.2500,  10.0000])
>>> torch.linspace(-10, 10, steps=5)
tensor([-10.,  -5.,   0.,   5.,  10.])

(9)torch.logspace()

功能:创建对数均分的一维张量,长度为steps,对数的底为base。

torch.logspace(start, end, steps=100, base=10.0, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

  1. start:数列的起始值。
  2. end:数列的结束值。
  3. steps:数列的长度,默认为100。
  4. base:对数的底,默认为10。
  5. 其他参数同上。
>>> torch.logspace(start=-10, end=10, steps=5)
tensor([ 1.0000e-10,  1.0000e-05,  1.0000e+00,  1.0000e+05,  1.0000e+10])
>>> torch.logspace(start=0.1, end=1.0, steps=5)
tensor([  1.2589,   2.1135,   3.5481,   5.9566,  10.0000])

(10)torch.eye()

功能:创建单位对角矩阵(2维张量),默认为方阵。

torch.eye(n, m=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

  1. n:矩阵行数。
  2. m:(可选)矩阵列数,默认等于n。
  3. 其他参数同上。
>>> torch.eye(3)
tensor([[ 1.,  0.,  0.],[ 0.,  1.,  0.],[ 0.,  0.,  1.]])

3.依据概率分布创建张量

(1)torch.normal()

功能:返回随机数的张量,这些随机数是从给定平均值和标准差的独立正态分布中提取的。

torch.normal(mean, std, *, generator=None, out=None)

在这里插入图片描述
有四种模式:
1.mean是标量,std是标量:这是只有一个高斯分布,这时需要指定张量的尺寸,即在这个高斯分布里采样多少次。

# mean:标量 std: 标量
t_normal = torch.normal(0., 1., size=(4,))
print(t_normal)

在这里插入图片描述
2和3. mean和std中有一个是张量,一个是标量:

# mean:张量 std: 标量
mean = torch.arange(1, 5, dtype=torch.float)
std = 1
t_normal = torch.normal(mean, std)
print("mean:{}\nstd:{}".format(mean, std))
print(t_normal)

这里就是从四个高斯分布中分别采样了一次得到的张量。
在这里插入图片描述
4. mean和std都为张量:

# mean:张量 std: 张量
mean = torch.arange(1, 5, dtype=torch.float)
std = torch.arange(1, 5, dtype=torch.float)
t_normal = torch.normal(mean, std)
print("mean:{}\nstd:{}".format(mean, std))
print(t_normal)

在这里插入图片描述

(2)torch.randn()

功能:生成标准正态分布,normal的特殊情况。

torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

>>> torch.randn(4)
tensor([-2.1436,  0.9966,  2.3426, -0.6366])
>>> torch.randn(2, 3)
tensor([[ 1.5954,  2.8929, -1.0923],[ 1.1719, -0.4709, -0.1996]])

(3)torch.randn_like()

torch.randn_like(input, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format)

在这里插入图片描述

(4)torch.rand()

功能:生成[0, 1)之间均匀分布的随机采样张量。

torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

>>> torch.rand(4)
tensor([ 0.5204,  0.2503,  0.3525,  0.5673])
>>> torch.rand(2, 3)
tensor([[ 0.8237,  0.5781,  0.6879],[ 0.3816,  0.7249,  0.0998]])

(5)torch.rand_like()

torch.rand_like(input, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format)

在这里插入图片描述

(6)torch.randint()

功能:生成[low, high)之间均匀分布的随机采样张量。

torch.randint(low=0, high, size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

  1. low:(可选)均匀分布范围的下限,默认为0。
  2. high:均匀分布范围的“上限”。
  3. 其他参数同上。
>>> torch.randint(3, 5, (3,))
tensor([4, 3, 4])>>> torch.randint(10, (2, 2))
tensor([[0, 2],[5, 5]])>>> torch.randint(3, 10, (2, 2))
tensor([[4, 5],[6, 7]])

(7)torch.randint_like()

torch.randint_like(input, low=0, high, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format)

在这里插入图片描述

(8)torch.randperm()

功能:生成从0到n-1的随机排列。

torch.randperm(n, out=None, dtype=torch.int64, layout=torch.strided, device=None, requires_grad=False)

在这里插入图片描述

  1. n:上界,也是tensor的长度。
  2. 其他参数同上。
>>> torch.randperm(4)
tensor([2, 1, 0, 3])

(9)torch.bernoulli()

功能:以input为概率,生成伯努利分布(0-1分布,两点分布)。

torch.bernoulli(input, *, generator=None, out=None)

在这里插入图片描述

  1. input:(张量)伯努利分布的概率值,依据这个概率值抽取0/1。
  2. 其他参数同上。
>>> a = torch.empty(3, 3).uniform_(0, 1)  # generate a uniform random matrix with range [0, 1]
>>> a
tensor([[ 0.1737,  0.0950,  0.3609],[ 0.7148,  0.0289,  0.2676],[ 0.9456,  0.8937,  0.7202]])
>>> torch.bernoulli(a)
tensor([[ 1.,  0.,  0.],[ 0.,  0.,  0.],[ 1.,  1.,  1.]])>>> a = torch.ones(3, 3) # probability of drawing "1" is 1
>>> torch.bernoulli(a)
tensor([[ 1.,  1.,  1.],[ 1.,  1.,  1.],[ 1.,  1.,  1.]])
>>> a = torch.zeros(3, 3) # probability of drawing "1" is 0
>>> torch.bernoulli(a)
tensor([[ 0.,  0.,  0.],[ 0.,  0.,  0.],[ 0.,  0.,  0.]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十年空缺一朝回归,百度正式任命王海峰出任CTO

来源:机器之心百度要回归技术初心了吗?自 2010 年李一男卸任百度 CTO 之后,百度对这一职位就再无公开任命,一空就是 10 年。而今天上午李彦宏突然发出的一纸职位调令,让这个空缺多年的百度 CTO 之位有了新的掌舵手。就…

Windows下卸载TensorFlow

激活tensorflow:activate tensorflow输入:pip uninstall tensorflowProceed(y/n):y如果是gpu版本: 激活tensorflow:activate tensorflow-gpu输入:pip uninstall tensorflow-gpuProceed&#xf…

大道至简第三章

大道至简读后感 这一章名为团队缺乏的不仅仅是管理,显而易见,这一章强调的就是作为一名软件工程实践者,团队协作的重要性。 这一章共分为八个小结,分别为三个人的团队,做项目 死亡游戏 ?,做 ISO 质量体系…

PyTorch框架学习三——张量操作

PyTorch框架学习三——张量操作一、拼接1.torch.cat()2.torch.stack()二、切分1.torch.chunk()2.torch.split()三、索引1.torch.index_select()2.torch.masked_select()四、变换1.torch.reshape()2.torch.transpace()3.torch.t()4.torch.squeeze()5.torch.unsqueeze()一、拼接 …

'chcp' 不是内部或外部命令,也不是可运行的程序

在cmd窗口中输入activate tensorflow时报错chcp 不是内部或外部命令,也不是可运行的程序 添加两个环境变量即可解决: 将Anaconda的安装地址添加到环境变量“PATH”,如果没有可以新建一个,我的安装地址是“D:\Anaconda”&#xf…

2019年全球企业人工智能发展现状分析报告

来源:199IT互联网数据中心《悬而未决的AI竞赛——全球企业人工智能发展现状》由德勤洞察发布,德勤中国科技、传媒和电信行业编译。为了解全球范围内的企业在应用人工智能技术方面的情况以及所取得的成效,德勤于2018年第三季度针对早期人工智能…

qt调动DLL

void func(void); // dll库中的函数 typedef void (*PFUNC)(void); 方法一&#xff1a; HMODULE g_hAPIDLL NULL; wchar_t tcDLLPath[100] L"D:\\name.dll"; g_hAPIDLL ::LoadLibrary(tcDLLPath); if (NULL g_hAPIDLL) { qDebug() << "load library f…

PyTorch框架学习四——计算图与动态图机制

PyTorch框架学习四——计算图与动态图机制一、计算图二、动态图与静态图三、torch.autograd1.torch.autograd.backward()2.torch.autograd.grad()3.autograd小贴士4.代码演示理解&#xff08;1&#xff09;构建计算图并反向求导&#xff1a;&#xff08;2&#xff09;grad_tens…

ipynb文件转为python(.py)文件

在Anaconda中的jupyter打开该ipynb文件&#xff0c;然后依次点击File—>Download as—>python(.py)

美国准备跳过5G直接到6G 用上万颗卫星包裹全球,靠谱吗?

来源&#xff1a;瞭望智库这项2015年提出的计划&#xff0c;规模极其巨大&#xff0c;总计要在2025年前发射近12000颗卫星。有自媒体认为&#xff0c;该计划表示美国将在太空中建立下一代宽带网络&#xff0c;绕过5G&#xff0c;直接升级到6G&#xff0c;并据此认为“6G并不遥远…

8月读书分享-《执行力是训练出来的》

写在最开头的是&#xff0c;没有拿到这本书之前其实我是很期待的&#xff0c;因为我觉得执行力是我所很需要的东西。但是拿到书之后就有一些失望了&#xff0c;因为我发现他的章节实在是太多了&#xff0c;我总觉得如果章节太多会不会其实是作者的归纳整理能力不太好呢&#xf…

PyTorch框架学习五——图像预处理transforms(一)

PyTorch框架学习五——图像预处理transforms&#xff08;一&#xff09;一、transforms运行机制二、transforms的具体方法1.裁剪&#xff08;1&#xff09;随机裁剪&#xff1a;transforms.RandomCrop()&#xff08;2&#xff09;中心裁剪&#xff1a;transforms.CenterCrop()&…

机器之心 GitHub 项目地址:

机器之心 GitHub 项目地址&#xff1a;https://github.com/jiqizhixin/ML-Tutorial-Experiment

IBM Watson大裁70% 员工,撕掉了国内大批伪AI企业最后一块遮羞布!

来源:新医路Watson 是IBM 的重量级AI 系统&#xff1b;近年IBM 大力发展AI 医疗&#xff0c;在2015 年成立独立的 Watson Health 部门&#xff0c;并收购多家医疗数据公司&#xff0c;前景看好。然而短短三年&#xff0c;这个明星部门就要裁员50% 到70% 的员工&#xff0c;代表…

PyTorch框架学习六——图像预处理transforms(二)

PyTorch框架学习六——图像预处理transforms&#xff08;二&#xff09;&#xff08;续&#xff09;二、transforms的具体方法4.图像变换&#xff08;1&#xff09;尺寸变换&#xff1a;transforms.Resize()&#xff08;2&#xff09;标准化&#xff1a;transforms.Normalize()…

新浪微博学习的知识点

instancetype 默认会识别当前是哪个类或者对象调用,就会转换成对应的类的对象 模型设计思想:Item:就是苹果的模型命名规范 tabBarItem: 决定着 tabBar 上按钮的内容 NSMutableDictionary *att [[NSMutableDictionary alloc] init]; att[NSForegroundColorAttributeName] […

numpy方法读取加载mnist数据集

方法来自机器之心公众号 首先下载mnist数据集&#xff0c;并将里面四个文件夹解压出来&#xff0c;下载方法见前面的博客 import tensorflow as tf import numpy as np import osdataset_path rD:\PycharmProjects\tensorflow\MNIST_data # 这是我存放mnist数据集的位置 is_…

纳米线传感器来了,传感芯片还会远吗

来源&#xff1a;科学网“无旁路电路”纳米线桥接生长方案 黄辉供图微型气体检测仪 黄辉供图人工智能、可穿戴装备、物联网等信息技术迅猛发展&#xff0c;需要海量的传感器提供支持&#xff0c;大数据和云计算等业务也需要各种传感器实时采集数据来支撑。但目前的传感器存在国…

PyTorch框架学习七——自定义transforms方法

PyTorch框架学习七——自定义transforms方法一、自定义transforms注意要素二、自定义transforms步骤三、自定义transforms实例&#xff1a;椒盐噪声虽然前面的笔记介绍了很多PyTorch给出的transforms方法&#xff0c;也非常有用&#xff0c;但是也有可能在具体的问题中需要开发…

Fashion-MNIST下载地址

训练集的图像&#xff1a;60000&#xff0c;http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz 训练集的类别标签&#xff1a;60000&#xff0c;http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.…