tensorflow语法【tf.concat()详解】
相关文章:
【一】tensorflow安装、常用python镜像源、tensorflow 深度学习强化学习教学
【二】tensorflow调试报错、tensorflow 深度学习强化学习教学
trick1---实现tensorflow和pytorch迁移环境教
tf.concat()是相对比较好理解的函数,它和python里的numpy.concatenate()函数作用是一样的。都是把多个array沿着某一个维度接在一起。只不过numpy.concatenate()用来处理numpy array,tf.concat()用于处理tensor。他们俩有个共同点,就是得到的结果tensor或者numpy array的维度的数量一定是一样的。
例子:
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0)输出结果:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
shape=[4, 3]先来分解一下t1和t2。首先
t1 = [[1, 2, 3], [4, 5, 6]]可以看成:t1 = [A, B]
A = [1,2,3]
B = [4,5,6]t1的shape是[2,3],意思是有2个元素[A, B], 他们每个里面有3个元素,t2同理。
t2 = [C, D]
C = [7,8,9]
D = [10,11,12]这里[2,3]的维度数量是2,也就是2维的。如果是3维的可能是[2,3,什么]。知道
tf.concat()不会改变维度数量非常重要。因为tf.concat()只是对对应维度元素数量的叠加。比如tf.concat([t1, t2], 0)意思是对t1和t2在第一维度对接。因为他俩的shape都是[2,3],输出tensor的shape一定是[4,3],因为他俩的第一维度都是2,2+2=4。再比如如果是tf.concat([t1, t2], 1),那么输出shape一定是[2,6],以此类推。
维度是从0开始算的,也就是沿着第一个维度接起来。(以此类推,
axis=1就是第二个维度),从shape可以看出t1和t2都是只有两个维度。既然是沿着第一个维度对接,那根本就不用看第二个维度。那么什么是第一个维度呢?就可以理解成第一层中括号。t1的第一层中括号是
t1 = [A, B], t2 = [C, D](展开A,B,C,D是第二个维度)
那对接是什么意思呢?就是把对应的中括号打开,把对应的里面一层的元素放在一起,再用中括号全扩起来。tf.concat([t1, t2], 0) #后面的0的意思是 axis=0按步骤是:
- 打开中括号:[A,B],[C,D] -> A,B,C,D
- 放在一起再扩起来: A,B,C,D -> [A,B,C,D]
这里已经知道了输出的shape是[4,3]。其中的4代表第一维度有4个元素,就是A,B,C,D。
t1 = [A, B], t2 = [C, D]各只有一个中括号,所以不用考虑对应,直接放一起就行了。如果t1和t2比如各有2个中括号的话,括回去之后也应该有2个中括号,下面例2有讲到A,B,C,D都是什么来着?
A = [1,2,3]
B = [4,5,6]
C = [7,8,9]
D = [10,11,12]每个里面有3个元素,这就是[4,3]的3的含义。
所以输出结果是:[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], shape = [4,3]注意t1和t2是有顺序的。如果这行命令是:
tf.concat([t2, t1], 0)那么结果应该是
[[7, 8, 9], [10, 11, 12], [1, 2, 3], [4, 5, 6]]tf.concat([t1, t2], 1) #1是 axis=1,第二维度的意思还是按照上面的方法,我们知道了输出结果的shape一定是[2,6]。既然沿着第二维度对接,那么不用看第一维度。
第一维度是:t1 = [A, B], t2 = [C, D](不用动,也就是这一维度的输出结果一定是[x1, x2])
第二维度是:A = [1,2,3] B = [4,5,6] C = [7,8,9] D = [10,11,12]
这里A,B属于t1,C,D属于t2,各有2个中括号。那么按顺序,A对应C,B对应D。
- 打开中括号:[1,2,3],[4,5,6],[7,8,9],[10,11,12] -> 1,2,3, 4,5,6, 7,8,9, 10,11,12
- 对应的A,C放一起:1,2,3,7,8,9 -> [1,2,3,7,8,9]
- 对应的B,D放一起: 4,5,6,10,11,12 -> [4,5,6,10,11,12]
最后在第一维度括起来,结果是:
[[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]], shape = [2,6]
直观方法:
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0)其实t1是个2维数组,也就是一个面。形象一点就是:
t1:
-------
|1|2|3|
|-|-|-|
|4|5|6|
-------
t2:
----------
| 7| 8| 9|
|--|--|--|
|10|11|12|
----------都是2行3列。
我会把第一维度看成行,第二维度看成列。
如果沿着行对接,也就是把行数增加为4行,列数还是3列。那么结果就是:----------
| 1| 2| 3|
|--|--|--|
| 4| 5| 6|
----------
| 7| 8| 9|
|--|--|--|
|10|11|12|
----------这个矩阵就是:
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]
demo2:
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1)这就是沿着列对接,也就是变成6列。行还是3行。也就变成了:
-------------------
| 1| 2| 3| 7| 8| 9|
|--|--|--|--|--|--|
| 4| 5| 6|10|11|12|
-------------------输出就是
[[1, 2, 3, 7, 8, 9],
[4, 5, 6, 10, 11, 12]]如果两个tensor都有第三维的话,比如:
t1 = [[[1], [2], [3]], [[4], [5], [6]]]
t2 = [[[7], [8], [9]], [[10], [11], [12]]]
tf.concat([t1, t2], 2)t1和t2的shape都是[2,3,1],沿着第三维对接。结果shape一定是[2,3,2]。
那么用这个直观的方法就是非常好理解,
就可以理解成把t1的2d矩阵放在t2的2d矩阵的前面,形成一个3d矩阵,像这样:
3d数组这样理解:2行,3列,2层
2行:[A, B]
3列:A = [a,b,c], B = [d, e, f]
2层:a = [1,7], b = [2,8], c = [3, 9], d = [4, 10], e = [5, 11], f = [6, 12]
所以结果是:[[[1,7], [2,8], [3, 9]], [[4, 10], [5, 11], [6, 12]]], shape = [2,3,2]这种方法的弊端就是大于3维的数组就不好想了,毕竟我们生活的是3维世界。
链接:https://www.jianshu.com/p/c465e7fab882
tensorflow语法【tf.concat()详解】的更多相关文章
- Tensorflow中tf.ConfigProto()详解
参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...
- tensorflow 的tf.where详解
最近在用到数据筛选,观看代码中有tf.where()的用法,不是很常用,也不是很好理解.在这里记录一下 tf.where( condition, x=None, y=None, name=None ) ...
- Markdown语法说明(详解版)
####date: 2016-05-26 20:38:58 tags: Markdown tags && Syntax ##Markdown语法说明(详解版)杨帆发表于 2011-11 ...
- nginx入门与实战 安装 启动 配置nginx Nginx状态信息(status)配置 正向代理 反向代理 nginx语法之location详解
nginx入门与实战 网站服务 想必我们大多数人都是通过访问网站而开始接触互联网的吧.我们平时访问的网站服务 就是 Web 网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务. Web ...
- 学习TensorFlow的tf.concat使用
https://www.tensorflow.org/api_docs/python/tf/concat
- Markdown语法图文全面详解(转)
基本语法参考 转自:https://blog.csdn.net/u014061630/article/details/81359144 更改字体.颜色.大小,设置文字背景色,调整图片大小设置居中 ...
- Tensorflow.nn 核心模块详解
看过前面的例子,会发现实现深度神经网络需要使用 tensorflow.nn 这个核心模块.我们通过源码来一探究竟. # Copyright 2015 Google Inc. All Rights Re ...
- 【目标检测】SSD+Tensorflow 300&512 配置详解
SSD_300_vgg和SSD_512_vgg weights下载链接[需要科学上网~]: Model Training data Testing data mAP FPS SSD-300 VGG-b ...
- tensorflow LSTM+CTC使用详解
最近用tensorflow写了个OCR的程序,在实现的过程中,发现自己还是跳了不少坑,在这里做一个记录,便于以后回忆.主要的内容有lstm+ctc具体的输入输出,以及TF中的CTC和百度开源的warp ...
- nginx语法之location详解
Location语法优先级排列 匹配符 匹配规则 优先级 = 精确匹配 ^~ 以某个字符串开头 ~ 区分大小写的正则匹配 ~* 不区分大小写的正则匹配 !~ 区分大小写不匹配的正则 !~* 不区分大小 ...
随机推荐
- 数据结构——AVL树
AVL树是一种特殊的二叉查找树,其特征在于:对所有节点来说,其左子树和右子树间的高度差小于等于1.本文简要总结下AVL树的几种基本操作. 节点结构体定义 typedef struct Node_s { ...
- Django 对实体的增删改查样例
class UserInfo(models.Model): """ 人员信息 """ user_id = models.CharField( ...
- Vue第五篇 Vue的生命周期
Vue生命周期简介 生命周期的钩子函数 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
- Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
本文为博主原创,未经允许不得转载: 目录: 1. ZAB 协议 2. zookeer 节点状态 3. zookeeper 注册中心与 nacos 注册中心比较 4. zookeeper 配置注册中心 ...
- 【RTOS】基于RTOS的降低功耗的策略
RTOS中降低功耗的策略 Saving Power with an RTOS 介绍 随着绿色节能产品需求的增加,快速增长的移动设备,其电池寿命最受关注,设计者必须要考虑在其设计中如何最大限度的降低功耗 ...
- 使用JavaStream将List转为Map
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 使用Java Stream将List转换为Map ...
- [转帖]018、数据库管理之TiDB升级
升级 使用TiUP进行补丁升级(HotFix) 版本升级流程 升级准备-更新TiUP 升级准备- 编辑TiUP Cluster 升级准备- 集群监控状态检查 升级TiDB 集群 验证TiDB集群升级结 ...
- [转帖]TIDB-TIDB节点磁盘已满报警
一.背景 今日突然收到tidb节点的磁盘报警,磁盘容量已经超过了80%,但是tidb是不放数据的,磁盘怎么会满,这里就需要排查了 二.问题排查 解决步骤 1.df -h查看哪里占用磁盘比较多,然后通过 ...
- [转帖]配置ftp连接对象存储bucket子目录的方法
https://developer.jdcloud.com/article/1838 配置ftp连接对象存储bucket子目录的方法 京东云技术交付部 2021-01-27 IP归属:未知 441 ...
- 【转帖】Linux查看二进制文件:一招制敌(linux二进制查看文件)
https://www.dbs724.com/146055.html 一招制敌:学会Linux查看二进制文件 在Linux操作系统中,二进制文件是一种常见的文件类型.如果你想深入了解一个二进制文件,可 ...
