和的爱恨情仇之基本数据类型:…
版本:1.6.0
版本:1.15.0
基本概念:标量、一维向量、二维矩阵、多维张量。
1、中的张量
(1)通过torch.()来建立常量
这里有两种张量,一种是直接通过toch.()建立的,另一种是 ()建立的,它们的区别是:在新版本的torch中可以直接使用而不需要使用。
在旧版本中和的区别在于,可以进行误差的反向传播,而不可以。
默认的也是False。
我们接下来看看使用torch.()来看看例子:
对于常量,是不能够在声明指定其需要梯度计算的,如下所示:
为什么使用torch.()不可以直接指明=True呢,但是可以通过显示指定a.=True。我的理解是常量和变量之间是可以互相转换的,当将通过(数据.=True)后,该常量已经变成了变量。
(2)通过from torch. 来建立变量
我们传入的值就不能是一个列表了,需要一个张量,我们可以这么做:
这也可以说明常量是可以转换为变量的。但需要注意的是由常量转换而来的变量就不是原来的常量了:
(3) 通过torch.()更加灵活的建立常量和变量
我们还需要注意的是使用torch,()和torch.()以及()区别:这里可以直接传入一个列表啦
我们也可以直接使用torch.()来定义一个变量,通过指定来标明该变量是否能够进行梯度计算并进行更新。
2、中的张量
在中,可以通过tf.()和tf.()来建立张量,与旧版本类似的是,tf.()对应torch.(),tf.()对应torch.(),tf.创建的是常数,tf. 创建的是变量。变量属于可训练参数,在训练过程中其值会持续变化,也可以人工重新赋值,而常数的值自创建起就无法改变。
其中tf.()是将b的值赋值给a,因为a是常量,因此不可改变,就会报该错误,再看下面一个例子:
我们将10赋值给state,然后新建了一个变量。state是一个变量,这样是没有问题的,这样的话在训练的过程中我们就可以不断地更新参数了。 再看一个例子:
在这种情况下,我们仅仅只是将a指向的值改为指向b,并没有真正修改a的值。
如果我们像那样将常量转换为变量:
会发现,其实是新建了一个变量,并不是将原始的常量变为了变量、
如果有什么错误还请指出,有什么遗漏的还请补充,会进行相应的修改。
评论(0)