热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TensorFlow之tf.concat()详解

tensorflow中用来拼接张量的函数tf.concat()或者说tf.concat是连接两个矩阵的操作语法:tf.concat([tensor1,tensor

tensorflow 中用来拼接张量的函数tf.concat()
或者说tf.concat是连接两个矩阵的操作

语法:

tf.concat([tensor1, tensor2, tensor3,...], axis)

示例:

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]]tf.concat([t1, t2], 1) # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]# tensor t3 with shape [2, 3]# tensor t4 with shape [2, 3]tf.shape(tf.concat([t3, t4], 0)) # [4, 3]tf.shape(tf.concat([t3, t4], 1)) # [2, 6]

这里解释了当axis=0和axis=1的情况

怎么理解这个axis呢?

axis=0 代表在第0个维度拼接
axis=1 代表在第1个维度拼接

对于一个二维矩阵,第0个维度代表最外层方括号所框下的子集,第1个维度代表内部方括号所框下的子集。
维度越高,括号越小。

对于这种情况,我可以再解释清楚一点:
对于[ [ ], [ ]][[ ], [ ]],低维拼接等于拿掉最外面括号,高维拼接是拿掉里面的括号(保证其他维度不变)。
注意:tf.concat()拼接的张量只会改变一个维度,其他维度是保存不变的
比如两个 shape为[2,3] 的矩阵拼接,要么通过 axis=0 变成 [4,3],要么通过 axis=1 变成 [2,6]。
改变的维度索引对应axis的值。

这样就可以理解多维矩阵的拼接了,可以用axis的设置来从不同维度进行拼接。
对于三维矩阵的拼接,自然axis取值范围是[0, 1, 2]。

对于axis等于负数的情况:

负数在数组索引里面表示倒数(countdown)
比如,对于列表ls = [1,2,3]而言,ls[-1] = 3,表示读取倒数第一个索引对应值。

axis=-1表示倒数第一个维度,对于三维矩阵拼接来说,axis=-1等价于axis=2
同理,axis=-2代表倒数第二个维度,对于三维矩阵拼接来说,axis=-2等价于axis=1

一般在维度非常高的情况下,我们想在最’高’的维度进行拼接,一般就直接用countdown机制,直接axis=-1就搞定了。


推荐阅读
author-avatar
鱼db在海
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有