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…

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年第三季度针对早期人工智能…

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

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

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

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

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

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

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

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

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

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

numpy方法读取加载mnist数据集

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

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

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

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

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

美国芯片简史:军方大力扶持下的产物 但一度被日 韩超越

来源:知乎专栏腾讯科技近日发起系列策划,聚焦各个芯片大国的发展历程。第四期:《美国芯片简史》。集成电路是电子信息产业的的基石,电子信息产业对国民经济与社会发展具有重大推动作用。从全球集成电路产业发展历程来看&#xff0…

PyTorch框架学习八——PyTorch数据读取机制(简述)

PyTorch框架学习八——PyTorch数据读取机制(简述)一、数据二、DataLoader与Dataset1.torch.utils.data.DataLoader2.torch.utils.data.Dataset三、数据读取整体流程琢磨了一段时间,终于对PyTorch的数据读取机制有了一点理解,并自己…

报告 | 2019年全球数字化转型现状研究报告

来源:Prophet2019年,战略数字化转型的重要性已经不止于IT领域,而影响着全公司的竞争力。企业的相关预算直线攀升,利益相关方所关注的颠覆性技术数量急剧增加。数字化项目开始由首席高管主导,并由相互协作的跨职能团队管…

Android调用binder实现权限提升-android学习之旅(81)

当进程A权限较低,而B权限较高时,容易产生提权漏洞 fuzz测试的测试路径 First level Interface是服务 Second level Interface是服务中对应的接口 1.首先获取第一层和第二层接口,及服务以及对应服务提供的接口 2.根据以上信息结合参数类型信息…

PyTorch框架学习九——网络模型的构建

PyTorch框架学习九——网络模型的构建一、概述二、nn.Module三、模型容器Container1.nn.Sequential2.nn.ModuleList3.nn.ModuleDict()4.总结笔记二到八主要介绍与数据有关的内容,这次笔记将开始介绍网络模型有关的内容,首先我们不追求网络内部各层的具体…

中国17种稀土有啥军事用途?没它们,美军技术优势将归零

来源:陶慕剑观察 稀土就是化学元素周期表中镧系元素——镧(La)、铈(Ce)、镨(Pr)、钕(Nd)、钷(Pm)、钐(Sm)、铕(Eu)、钆(Gd)、铽(Tb)、镝(Dy)、钬(Ho)、铒(Er)、铥(Tm)、镱(Yb)、镥(Lu),再加上钪(Sc)和钇(Y)共17种元素。中国稀土占据着众多的世界第一&…

PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)

PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)一、卷积层二、转置卷积层三、池化层1.最大池化nn.MaxPool2d2.平均池化nn.AvgPool2d四、反池化层最大值反池化nn.MaxUnpool2d五、线性层六、激活函数层1.nn.Sigmoid2.nn.…