pytorch和tensorflow的爱恨情仇之张量

pytorch和tensorflow的爱恨情仇之基本数据类型:http://www.javashuo.com/article/p-uplvdtbh-nu.htmlhtml

pytorch版本:1.6.0ui

tensorflow版本:1.15.0spa

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

一、pytorch中的张量htm

(1)经过torch.Tensor()来创建常量blog

这里有两种张量,一种是直接经过toch.Tensor()创建的,另外一种是 Variable()创建的,它们的区别是:在新版本的torch中能够直接使用tensor而不须要使用Variable。get

在旧版本中Variable和Tensor的区别在于,Variable能够进行偏差的反向传播,而Tensor不能够。import

Variable默认的requires_grad也是False。require

咱们接下来看看使用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来标明该变量是否可以进行梯度计算并进行更新。

二、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那样将常量转换为变量:

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

 

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

相关文章
相关标签/搜索