详细理解Tensor中的张量_一维张量-程序员宅基地

技术标签: 深度学习-零零散散的内容  

最通俗的语言解释什么是张量,最近有混乱和不理解的可以详细看一下,耐心看就行。emmmm我今天遇到了个问题把我一下子乱了所以再回忆一下基础。

一、一维张量
从一维开始:

tf.constant([1.0 , 3.0 , 6.0])

表示:生成一个一维张量(向量),shape是1行3列即shape是[3]。为什么不是[1,3]呢?因为这个张量是一维的,只有一个维度,你可以把维度和shape理解为一个key:value的关系,就是一个维度是拥有值的,这个值在张量中体现为[] 的层数。
shape为[1,3]的应该是:tf.constant([[1.0 , 5.0 , 9.0]])

二、二维张量

tf.constant([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])

如上,这就是一个二维张量,看一个Tensor有多少个维度,首先从最里面层的[或者]来数,有多少个层的[或者]就是有多少个维度,所以这里是二维。
从[或者]来看,可以判断有两个维度,那如何判断这里的shape呢?
首先从最里面一个维度来看,它是有3个元素的,如[1.,2.,3.](注意,这个一般代表有几个特征,特征可以理解为Datafame的列),所以最里面一个维度为3,其次最里面这个维度有3个样本,所以最外面的维度是3.

我这里为什么要说最里面和最外面呢?而不说第一个维度、第二个维度呢?因为维度可以是相对的,你把最里面的维度叫做第一个维度也可以,把最外面的维度叫做第一个维度也可以。这个并无大碍。这里我们以最里面成为第一个维度,最外面成为第二个维度。

三、三维张量
先说,下面是一个三维张量:

tf.constant([ [ [1., 1.], [2., 2.]], [[3., 3.], [4., 4.] ] ])

其返回值是:

<tf.Tensor: id=700, shape=(2, 2, 2), dtype=float32, numpy=
array([[[1., 1.],
        [2., 2.]],

       [[3., 3.],
        [4., 4.]]], dtype=float32)>

如何理解呢?首先从[的数量可以判断这个张量是三维的,其次,第一个维度有2个值,如1.和1.,所以第一个维度是2,第二个维度也是有两个值,如[1.,1.]和[2.,2.],所以第二个维度是2,再看第三个维度,第三个维度有两个值,分别是:
[[1.,1.],[2.,2.]] 和[[3.,3.],[4.,4.]]
所以第三个维度是2。所以这个张量有3个维度,3个维度的值分别是2,2,2.即shape是(2,2,2)。注意:这里的维度index是从里往外算的。

四、超过三维
这里不举例了,反正就是一直堆叠[]到数组中即可。
比如:

tf.constant([ [ [[1., 1.], [2., 2.]], [[3., 3.], [4., 4.] ]] ])

这个就是一个四维向量!
返回值是:

<tf.Tensor: id=701, shape=(1, 2, 2, 2), dtype=float32, numpy=
array([[[[1., 1.],
         [2., 2.]],

        [[3., 3.],
         [4., 4.]]]], dtype=float32)>

分析一下:分析三维的时候那个三维张量的shape是(2,2,2),然后四维的话加了一个[]层,可以这样理解:就是把三维张量的第三维算作第四维的值,有多少个第三维,那么第四维的shape值就是多少。
这么这里是有这么多个三维,如下:

[[[1., 1.],
  [2., 2.]],

  [[3., 3.],
  [4., 4.]]]

以上是一个三维张量,而四维张量的第四维度只有这么一个三维,注意喔,上面这个三维看作四维的一个值!!! 所以因为第四维只有一个值,所以自然第四维的shape值就是1了。

emmm说好的不举例,又举例了。。。

以上就是第四维的情况。然后n维的话,也按照这个思路和规律去理解。

注意:!
在TF的张量打印出来的格式中,他不是从里到外数张量的,他是从外到里数的。
案例:

tf.constant([ [ [[1., 1.], [2., 2.]], [[3., 3.], [4., 4.] ]] ])

打印结果:

<tf.Tensor: id=948, shape=(1, 2, 2, 2), dtype=float32, numpy=
array([[[[1., 1.],
         [2., 2.]],

        [[3., 3.],
         [4., 4.]]]], dtype=float32)>

这里的shape提示为(1,2,2,2),如果shape从左往右来看,那么他在张量里面数的时候是从外往里数的。晋记!

如果shape从右往左来看,那么他在张量里面数的时候是从里往外数的。晋记!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42658739/article/details/110262737

智能推荐

python简易爬虫v1.0-程序员宅基地

文章浏览阅读1.8k次,点赞4次,收藏6次。python简易爬虫v1.0作者:William Ma (the_CoderWM)进阶python的首秀,大部分童鞋肯定是做个简单的爬虫吧,众所周知,爬虫需要各种各样的第三方库,例如scrapy, bs4, requests, urllib3等等。此处,我们先从最简单的爬虫开始。首先,我们需要安装两个第三方库:requests和bs4。在cmd中输入以下代码:pip install requestspip install bs4等安装成功后,就可以进入pycharm来写爬虫了。爬

安装flask后vim出现:error detected while processing /home/zww/.vim/ftplugin/python/pyflakes.vim:line 28_freetorn.vim-程序员宅基地

文章浏览阅读2.6k次。解决方法:解决方法可以去github重新下载一个pyflakes.vim。执行如下命令git clone --recursive git://github.com/kevinw/pyflakes-vim.git然后进入git克降目录,./pyflakes-vim/ftplugin,通过如下命令将python目录下的所有文件复制到~/.vim/ftplugin目录下即可。cp -R ...._freetorn.vim

HIT CSAPP大作业:程序人生—Hello‘s P2P-程序员宅基地

文章浏览阅读210次,点赞7次,收藏3次。本文简述了hello.c源程序的预处理、编译、汇编、链接和运行的主要过程,以及hello程序的进程管理、存储管理与I/O管理,通过hello.c这一程序周期的描述,对程序的编译、加载、运行有了初步的了解。_hit csapp

18个顶级人工智能平台-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏27次。来源:机器人小妹  很多时候企业拥有重复,乏味且困难的工作流程,这些流程往往会减慢生产速度并增加运营成本。为了降低生产成本,企业别无选择,只能自动化某些功能以降低生产成本。  通过数字化..._人工智能平台

electron热加载_electron-reloader-程序员宅基地

文章浏览阅读2.2k次。热加载能够在每次保存修改的代码后自动刷新 electron 应用界面,而不必每次去手动操作重新运行,这极大的提升了开发效率。安装 electron 热加载插件热加载虽然很方便,但是不是每个 electron 项目必须的,所以想要舒服的开发 electron 就只能给 electron 项目单独的安装热加载插件[electron-reloader]:// 在项目的根目录下安装 electron-reloader,国内建议使用 cnpm 代替 npmnpm install electron-relo._electron-reloader

android 11.0 去掉recovery模式UI页面的选项_android recovery 删除 部分菜单-程序员宅基地

文章浏览阅读942次。在11.0 进行定制化开发,会根据需要去掉recovery模式的一些选项 就是在device.cpp去掉一些选项就可以了。_android recovery 删除 部分菜单

随便推点

进程调度(一)——FIFO算法_进程调度fifo算法代码-程序员宅基地

文章浏览阅读7.9k次,点赞3次,收藏22次。一 定义这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO 算法并不能保证这些页面不被淘汰。这里,我_进程调度fifo算法代码

mysql rownum写法_mysql应用之类似oracle rownum写法-程序员宅基地

文章浏览阅读133次。rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等mysql取第一条数据写法SELECT * FROM t order by id LIMIT 1;oracle取第一条数据写法SELECT * FROM t where rownum =1 order by id;ok,上面是mysql和oracle取第一条数据的写法对比,不过..._mysql 替换@rownum的写法

eclipse安装教程_ecjelm-程序员宅基地

文章浏览阅读790次,点赞3次,收藏4次。官网下载下载链接:http://www.eclipse.org/downloads/点击Download下载完成后双击运行我选择第2个,看自己需要(我选择企业级应用,如果只是单纯学习java选第一个就行)进入下一步后选择jre和安装路径修改jvm/jre的时候也可以选择本地的(点后面的文件夹进去),但是我们没有11版本的,所以还是用他的吧选择接受安装中安装过程中如果有其他界面弹出就点accept就行..._ecjelm

Linux常用网络命令_ifconfig 删除vlan-程序员宅基地

文章浏览阅读245次。原文链接:https://linux.cn/article-7801-1.htmlifconfigping &lt;IP地址&gt;:发送ICMP echo消息到某个主机traceroute &lt;IP地址&gt;:用于跟踪IP包的路由路由:netstat -r: 打印路由表route add :添加静态路由路径routed:控制动态路由的BSD守护程序。运行RIP路由协议gat..._ifconfig 删除vlan

redux_redux redis-程序员宅基地

文章浏览阅读224次。reduxredux里要求把数据都放在公共的存储区域叫store里面,组件中尽量少放数据,假如绿色的组件要给很多灰色的组件传值,绿色的组件只需要改变store里面对应的数据就行了,接着灰色的组件会自动感知到store里的数据发生了改变,store只要有变化,灰色的组件就会自动从store里重新取数据,这样绿色组件的数据就很方便的传到其它灰色组件里了。redux就是把公用的数据放在公共的区域去存..._redux redis

linux 解压zip大文件(解决乱码问题)_linux 7za解压中文乱码-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏6次。unzip版本不支持4G以上的压缩包所以要使用p7zip:Linux一个高压缩率软件wget http://sourceforge.net/projects/p7zip/files/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2tar jxvf p7zip_9.20.1_src_all.tar.bz2cd p7zip_9.20.1make && make install 如果安装失败,看一下报错是不是因为没有下载gcc 和 gcc ++(p7_linux 7za解压中文乱码