zoukankan      html  css  js  c++  java
  • 【2021.02.16】Tensor、Variable、Dataset、Module、Optim的概念学习

    果然想直接进入实战还是太快了,有些概念还是必须要搞清楚的

    这次的学习资料来源是廖星宇的《深度学习入门之PyTorch》

    关于这部分的视频学习内容来自于:https://www.bilibili.com/video/BV1dp4y1U7mD

    (刚好这个老师的系统是使用macOS,太好了TuT

    Tensor(张量)

    PyTorch 里面处理的最基本的操作对象就是Tensor

    Tensor是张量的英文,表示的是一个多维的矩阵,比如零维就是一个点,一维就是向量,二维就是一般的矩阵,多维就相当于一个多维的数组,这和numpy是对应的,而且PyTorch的Tensor可以和numpy的ndarray相互转换,唯一不同的是PyTorch可以在GPU上运行,而numpy的ndarray只能在CPU上运行。

    (macOS就只能运行在CPU上

    以下内容来自参考链接:https://blog.csdn.net/qq_24407657/article/details/81835614

    张量基础

    张量有以下的相关概念

    scalar(标量/0维张量):一个数值
    vector(向量):一维数组/张量
    matrix(矩阵):二维数组/张量 例:[[2,3],[4,5]]
    tensor(张量):大于二维的数组,即多维数组
    

    在新文件里先建立一个数组,检查是否为tensor对象

    image-20210216130344097

    输出false,说明简单的数组并不能作为一个tensor对象

    使用torch的函数去生成一个tensor对象

    这里的rand后面的参数意思为一行两列的意思

    image-20210216130755990

    可以看到y就是一个tensor类型的数据

    将numpy转化为tensor类型

    numpy也很常用,要用Pytorch的话,要转为tensor类型

    image-20210216131651463

    使用torch.from_numpy()函数后,变为tensor类型

    image-20210216131816692

    随机抽样类函数

    torch.manual_seed(seed)

    设定生成随机数的种子,并返回一个torch._C.Generator对象

    参数:seed(int or long)种子

    torch.initial_seed()

    返回生成随机数的原始种子(pathon long)

    torch.get_rng_state()

    返回随机生成器状态(Byte Tensor)

    torch.set_rng_state(new_state)

    设定随机生成器状态

    参数:new_state(torch.Byte Tensor)-期望的状态

    torch.default_generator=<torch._C.Generator object>

    torch.bernoulli(input,out=None)->Tensor

    从伯努利分布中抽取二元随机数(0 or 1)

    输入张量需包含用于抽取上述二元随机值的概率。因此,输入中的所有值都必须在[0,1]区间。

    输出张量的第i个元素值,将会以输入张量的第i个概率值等于1.

    返回值将会是与输入相同大小的张量,每个值为0或者1

    input(Tensor)---伯努利分布的概率值

    out(Tensor, optional)---张量

    例子:

    img

    uniform_(0,1)使得产生的矩阵规范在[0,1]区间内

    torch.mutinomial(input,num_samples,replacement=False,out=None)->Long Tensor

    返回一个张量,每行包含从input相应行中定义的多项分布中抽取的num_samples个样本。

    注意:input每行的值不需要总和为1,但必须非负且总和不能为0

    当抽取样本时,依次从左到右排列(第一个样本对应第一列)

    如果input是一个向量时,out也是一个相同长度num_samples的向量

    如果input是一个矩阵,out对应是矩阵

    如果replacement=True,则样本抽取可以重复。否则一个样本在每行不能被重复抽取。

    num_samples必须小于input的长度

    参数:input(Tensor)---包含概率的张量

    num_samples(int)---抽取的样本数

    replacement(bool,optional)

    out(Tensor,optional)

    例子:

    img

    torch.normal(means,std,out=None)

    返回一个张量,包含从给定参数means,std,的离散正态分布中抽取随机数

    参数:

    means(Tensor)----包含每个输出元素相关的正态分布的均值

    std(Tensor)---包含每个输出元素相关的正态分布的标准差

    均值和标准差的形状不须匹配,但每个张量的元素个数须相同。

    例子:

    img

    注意:当means或std 为标量时,则共享

    索引,切片,连接,换位

    torch.cat(inputs,dimension=0)->tensor

    在给定维度上对输入的张量序列进行连接操作

    参数:

    inputs(sequence of Tensors)---可以是任意相同Tensor类型的python序列

    dimension(int,optional)---沿此维连接张量序列

    例子:

    img

    torch.squeeze(inout,dim=None,out=None)

    将输入张量形状中的1去除并返回

    给定维时,只在给定维度上挤压

    注意:返回张量和输入张量共享内存,改变其中一个的内容会改变另一个

    例子:

    img

    torch.unsqueeze(input,dim,out=None)

    类似2

    例子:

    img

    创建操作

    torch.eye(n,m=None,out=None)

    返回一个2维张量,对角线位置全为1,其他位置全0

    参数:

    n(int)----行数

    m(int,optional)---列数,如果为None默认为n

    out(Tensor,optional)

    torch.from_numpy(ndarray)--->Tensor

    Numpy桥,将numpy.ndarray转换为pytorch的Tensor

    返回的张量tensor和numpy的ndarray共享同一内存空间。修改一个会导致另外一个也被修改,返回的张量不能改变大小

    例子:

    img

    torch.linspace(start,end,steps=100,out=None)--->Tensor

    返回一个一维张量,包含区间start和end上均匀间隔的steps个点。

    输出1维张量的长度为steps

    参数:略

    例子:

    img

    torch.logspace(start,end,steps=100.out=None)--->Tensor

    设置的区间为常用对数,输出的值为其对应的真数

    其余的同2

    例子:

    img

    torch.ones(*sizes,out=None)--->Tensor

    例子:

    img

    torch.rand(*sizes,out=None)--->Tensor

    (0,1)区间均匀分布随机抽取

    例子:

    img

    torch.randn(*sizes,out=None)--->Tensor

    标准正态分布(均值0方差1,即高白噪声)中随机抽取

    同上

    torch.randperm(n,out=None)--->Long Tensor

    给定参数n,返回一个从0到n-1的随机整数排列

    torch.arange(start,end,step=1,out=None)--->Tensor

    参数:

    start(float)-------序列起始点

    end(float)--------序列终止点

    step(float)------相邻点的间隔大小

    out(Tensor,optional)

    例子:

    img

    torch.range(start,end,step=1,out=None)--->Tensor

    例子:

    img

    建议使用torch.arange

    torch.zeros(*sizes,out=None)--->Tensor

    类似于torch.ones()

    比较操作

    torch.max(input,dim,max=None,max_indices=None)--->(Tensor,LongTensor)

    返回输入张量给定维度上每行的最大值,并同时返回每个最大值的位置索引

    输出形状中,将dim维设为1,其他与输入型状保持一致

    参数:

    input (Tensor) – 输入张量

    dim (int) – 指定的维度

    max (Tensor, optional) – 结果张量,包含给定维度上的最大值

    max_indices (LongTensor, optional) – 结果张量,包含给定维度上每个最大值的位置索引

    img

    如果只有一个输入,返回所有元素中的最大值

    如果输入两个相同形状的张量,返回的张量形状不变,每个位置两个向量中的最大值

    Variable(变量)

    前向传播、反向传播:https://blog.csdn.net/bitcarmanlee/article/details/78819025

    前向传播、反向传播、自动求导:https://zhuanlan.zhihu.com/p/51385110

    Variable是PyTorch特有概念,是numpy里所没有的

    Variable和Tensor本质上没有区别,不过Variable会被放入一个计算图中,然后进行前向传播,反向传播,自动求导

    构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数。

    搭建计算图的过程,称为“正向传播”,这个是需要我们自己动手的,因为我们需要设计我们模型的结构。
    由损失函数求导的过程,称为“反向传播”
    

    variable三个重要组成属性

    分别为data、grad、grad_fn

    通过data可以取出Variable里面的tensor数值,grad_fn表示的是得到这个Variable的操作,比如通过加减还是乘除来得到的,最后grad是这个Variabel的反向传播梯度

    Variable在torch.autograd.Variable中,要将一个tensor变成Variable也非常简单,比如想让一个tensora变成Variable,只需要variable(a)就可以了

    Dataset(数据集)

    Dataset是数据的读取和预处理的过程

    torch.utils.data.Dataset是代表这一数据的抽象类,你可以自己定义你的数据类继承和重写这个抽象类,非常简单,只需要定义__len____getitem__这两个函数

    之前有接触一些:https://www.cnblogs.com/mokou/p/14397478.html

    Module(模组)

    在PyTorch里面编写神经网络,所有的层结构和损失函数都来自于torch.nn,所有的模型构建都是从这个基类nn.Module继承的

    torch.optim(优化)

    在机器学习或者深度学习中,我们需要通过修改参数使得损失函数最小化(或最大化),优化算法就是一种调整模型参数更新的策略。

  • 相关阅读:
    java的构造方法 java程序员
    No result defined for action cxd.action.QueryAction and result success java程序员
    大学毕业后拉开差距的真正原因 java程序员
    hibernate的回滚 java程序员
    验证码 getOutputStream() has already been called for this response异常的原因和解决方法 java程序员
    浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓 java程序员
    你平静的生活或许会在某个不可预见的时刻被彻底打碎 java程序员
    Spring配置文件中使用ref local与ref bean的区别. 在ApplicationResources.properties文件中,使用<ref bean>与<ref local>方法如下 java程序员
    poj1416Shredding Company
    poj1905Expanding Rods
  • 原文地址:https://www.cnblogs.com/mokou/p/14407552.html
Copyright © 2011-2022 走看看