tf.concat(), tf.stack(), tf.unstack()

参考 https://blog.csdn.net/loseinvain/article/details/79638183
https://blog.csdn.net/chengshuhao1991/article/details/78545723
输入两个二维数组如下:

a = tf.constant([[1,2,3],[3,4,5]]) # shape (2,3)
b = tf.constant([[7,8,9],[10,11,12]]) # shape (2,3)

tf.concat相当于numpy中的np.concatenate函数,用于将两个张量在某一个维度(axis)合并起来,例如:

ab1 = tf.concat([a,b], axis=0) # shape(4,3)
[[ 1  2  3]
 [ 3  4  5]
 [ 7  8  9]
 [10 11 12]]
ab2 = tf.concat([a,b], axis=1) # shape(2,6)
[[ 1  2  3  7  8  9]
 [ 3  4  5 10 11 12]]

tf.stack其作用类似于tf.concat,都是拼接两个张量,而不同之处在于,tf.concat拼接的是除了拼接维度axis外其他维度的shape完全相同的张量,并且产生的张量的阶数不会发生变化,而tf.stack则会在新的张量阶上拼接,产生的张量的阶数将会增加。

tf.stack()就是以指定的轴axis,将一个维度为R的张量数组转变成一个维度为R+1的张量。即将张量数组以指定的轴,提高一个维度。
假设要转变的张量数组values(如[x, y])的长度为N,其中的每个张量(如x, y)的形状为(A, B, C)。
如果轴axis=0,则转变后的张量的形状为(N, A, B, C)。
如果轴axis=1,则转变后的张量的形状为(A, N, B, C)。
如果轴axis=2,则转变后的张量的形状为(A, B, N, C)。其它情况依次类推。

a = tf.constant([[1,2,3],[3,4,5]])
b = tf.constant([[7,8,9],[10,11,12]])
ab3 = tf.stack([a,b], axis=0)
[[[ 1  2  3]
  [ 3  4  5]]

 [[ 7  8  9]
  [10 11 12]]]
ab4 = tf.stack([a,b], axis=1)
[[[ 1  2  3]
  [ 7  8  9]]

 [[ 3  4  5]
  [10 11 12]]]
ab5 = tf.stack([a,b], axis=2)
[[[ 1  7]
  [ 2  8]
  [ 3  9]]

 [[ 3 10]
  [ 4 11]
  [ 5 12]]]


‘x’ is [[1,1,1,1],[2,2,2,2],[3,3,3,3]],形状是(3,4),维度为2
‘y’ is [[4,4,4,4],[5,5,5,5],[6,6,6,6]],形状是(3,4),维度为2
stack([x,y]) => [[[1,1,1,1],[2,2,2,2],[3,3,3,3]], [[4,4,4,4],[5,5,5,5],[6,6,6,6]]] # axis的值默认为0。输出的形状为(2, 3, 4)
stack([x,y],axis=1) => [[[1,1,1,1],[4,4,4,4]],[[2,2,2,2],[5,5,5,5]],[[3,3,3,3],[6,6,6,6]]] # axis的值为1。输出的形状为(3, 2, 4)
stack([x,y],axis=2) => [[[1,4],[1,4],[1,4],[1,4]],[[2,5],[2,5],[2,5],[2,5]],[[3,6],[3,6],[3,6],[3,6]]]# axis的值为2。输出的形状为(3, 4, 2)

axis可这样理解:stack要将一组N个相同形状的张量(如[x, y])提高一个维度。axis就是在和原来形状相同的张量里,将axis指定的维度里每一个元素用拼接后的数组代替。如axis=2,表示在指定的第2个维度(数值),将原来的每一个数值(如1), 用x和y对应位置的数值拼接而成的数组(如[1, 4])代替,即从(A, B)转变为(A, B, N)。
对两个二维数组的拼接,axis=0则表示在三维层面上进行拼接,操作单位为二维矩阵;axis=1则表示在二维层面上进行拼接,操作单位为行向量,一一对应的进行拼接;axis=2则表示在一维层面上进行拼接,操作单位为数值,进行point-wise的拼接。

tf.unstack与tf.stack的操作相反,是将一个高阶数的张量在某个axis上分解为低阶数的张量,例如:

a1 = tf.unstack(ab3, axis=0)
[array([[1, 2, 3],
       [3, 4, 5]], dtype=int32), 
 array([[7, 8, 9],
       [10, 11, 12]], dtype=int32)]
a2 = tf.unstack(ab3, axis=1)
[array([[1, 2, 3],
       [7, 8, 9]], dtype=int32), 
 array([[3, 4, 5],
       [10, 11, 12]], dtype=int32)]

对tf.concat()的也可以做unstack操作

a3 = tf.unstack(ab1, axis=0)
[array([1, 2, 3], dtype=int32), 
 array([3, 4, 5], dtype=int32), 
 array([7, 8, 9], dtype=int32), 
 array([10, 11, 12], dtype=int32)]
a4 = tf.unstack(ab1, axis=2)
[array([[1, 7], [2, 8]], dtype=int32), 
 array([[3, 9], [3, 10]], dtype=int32), 
 array([[4, 11], [5, 12]], dtype=int32)] 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容