zoukankan      html  css  js  c++  java
  • pytorch和tensorflow的爱恨情仇之张量

    pytorch和tensorflow的爱恨情仇之基本数据类型:https://www.cnblogs.com/xiximayou/p/13759451.html

    pytorch版本:1.6.0

    tensorflow版本:1.15.0

    基本概念:标量、一维向量、二维矩阵、多维张量。

    1、pytorch中的张量

    (1)通过torch.Tensor()来建立常量

    这里有两种张量,一种是直接通过toch.Tensor()建立的,另一种是 Variable()建立的,它们的区别是:在新版本的torch中可以直接使用tensor而不需要使用Variable。

    在旧版本中Variable和Tensor的区别在于,Variable可以进行误差的反向传播,而Tensor不可以。

    Variable默认的requires_grad也是False。

    我们接下来看看使用torch.Tensor()来看看例子: 

    对于常量,是不能够在声明指定其需要梯度计算的,如下所示:

    为什么使用torch.Tensor()不可以直接指明requires_grad=True呢,但是可以通过显示指定a.requires_grad=True。我的理解是常量和变量之间是可以互相转换的,当将requires_grad通过(数据.requires_grad=True)后,该常量已经变成了变量。

    (2)通过from torch.autograd import Variable来建立变量

    我们传入的值就不能是一个列表了,需要一个张量,我们可以这么做:

    这也可以说明常量是可以转换为变量的。但需要注意的是由常量转换而来的变量就不是原来的常量了:

    (3) 通过torch.tensor()更加灵活的建立常量和变量

    我们还需要注意的是使用torch,Tensor()和torch.tensor()以及Variable()区别:这里可以直接传入一个列表啦

    我们也可以直接使用torch.tensor()来定义一个变量,通过指定requires_grad来标明该变量是否能够进行梯度计算并进行更新。

    2、tensorflow中的张量

    在tensorflow中,可以通过tf.consatnt()和tf.Variable()来建立张量,与pytorch旧版本类似的是,tf.constant()对应torch.Tensor(),tf.Variable()对应torch.Variable(),tf.constant创建的是常数,tf. Variable创建的是变量。变量属于可训练参数,在训练过程中其值会持续变化,也可以人工重新赋值,而常数的值自创建起就无法改变。

    其中tf.assign()是将b的值赋值给a,因为a是常量,因此不可改变,就会报该错误,再看下面一个例子:

    我们将10赋值给state,然后新建了一个变量state_。state是一个变量,这样是没有问题的,这样的话在训练的过程中我们就可以不断地更新参数了。 再看一个例子:

    在这种情况下,我们仅仅只是将a指向的值改为指向b,并没有真正修改a的值。 

    如果我们像pytorch那样将常量转换为变量:

    会发现,其实是新建了一个变量,并不是将原始的常量变为了变量、 

    如果有什么错误还请指出,有什么遗漏的还请补充,会进行相应的修改。

  • 相关阅读:
    有没有用户体验+UI+前端集于一身的人
    ruby array.count
    ruby subset
    向李刚同学道歉
    rails3转载
    RVM and Capistrano
    paperclip自定制文件名
    ruby爬虫
    rails3已经内置subdomain
    摘录
  • 原文地址:https://www.cnblogs.com/xiximayou/p/13762099.html
Copyright © 2011-2022 走看看