pytorch和tensorflow的爱恨情仇之张量

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

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

pytorch版本:1.6.0

tensorflow版本:1.15.0

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

1、pytorch中的张量

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

pytorch和tensorflow的爱恨情仇之张量第1张

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

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

pytorch和tensorflow的爱恨情仇之张量第2张

Variable默认的requires_grad也是False。

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

pytorch和tensorflow的爱恨情仇之张量第3张

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

pytorch和tensorflow的爱恨情仇之张量第4张

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

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

pytorch和tensorflow的爱恨情仇之张量第5张

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

pytorch和tensorflow的爱恨情仇之张量第6张

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

pytorch和tensorflow的爱恨情仇之张量第7张

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

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

pytorch和tensorflow的爱恨情仇之张量第8张

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

2、tensorflow中的张量

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

pytorch和tensorflow的爱恨情仇之张量第9张

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

pytorch和tensorflow的爱恨情仇之张量第10张

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

pytorch和tensorflow的爱恨情仇之张量第11张

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

pytorch和tensorflow的爱恨情仇之张量第12张

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

pytorch和tensorflow的爱恨情仇之张量第13张

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

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

免责声明:文章转载自《pytorch和tensorflow的爱恨情仇之张量》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成数据的增删改查MFC获取文本框字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JMeter之BeanShell常用内置对象

 一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简的解释器jar文件大小为175k。...

ToStringBuilder和ToStringStyle(覆盖每个实体的 toString 方法)

今天系统要打印日志,发现所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象, 这样如果系统内存小的话会暴内存(前提系统实体比较多)。 由于打印的时候包含包名,感觉太长了, 使用ToStringStyle.SHORT_PREFIX_STYLE 截掉包名 importjava.lang.refl...

使用正则表达式来截取nginx中的内置变量

nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是类似 cn=username这样的 我们想要只留下username ,可以这样: if ( $ssl_client_s_dn ~ (CN=([Ss]*)) )...

c语言1博客作业09

一、本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/10033 我在这个课程的目标是 <学习c语言知识,学会做编程题,学会做小程序> 这个作业在那个具体方面帮助我实现目标 <学会使用co...

安装JDK1.8以及配置环境变量的步骤

一、 首先到官网下载jdk1.8,下载的版本分为windows和linux,这里需要安装操作系统进行下载。我的是64位就下载x64,32位系统则下载x86 二、 然后就是安装,双击进行安装,这里不用更换任何配置,直接下一步到安装结束,follow me。。。。  三、 然后就是环境变量的配置,这里点击我的电脑,属性 四、 然后就是环境变量...

objective_C中用@interface和 @property 方式声明变量的区别

转帖请在开头处注明文章链接,请支持原创。      一直有疑问,在objective_C中声明变量会有 2种方式,今天有空和网友讨论了下,并且自己查了stackoverflew后算是稍微弄懂了一点。记录如下:       用了一段oc;会发现有2种定义变量的方式       1.在  @interface :NSObject{} 的括号中,当然NSObje...