tf.concat中axis的含义与使用详解


Posted in Python onFebruary 07, 2020

tensorflow中tf.concat的axis的使用我一直理解的比较模糊,这次做个笔记理下自己的思路。

import tensorflow as tf
tf.enable_eager_execution()
import numpy as np

先生成两个矩阵m1, 和m2, 大小为两行三列

m1 = np.random.rand(2,3) # m1.shape (2,3)
m1
>>array([[0.44529968, 0.42451167, 0.07463199],
    [0.35787143, 0.22926186, 0.34583839]])
m2 = np.random.rand(2,3) # m2.shape (2,3)
m2
>>array([[0.92811531, 0.6180391 , 0.71969461],
    [0.00564108, 0.55381637, 0.17155987]])

接下来采用tf.concat进行连接,简单来说,axis=0实际就是按行拼接,axis=1就是按列拼接

# axis = 0
m3 = tf.concat([m1,m2],axis=0)
m3
>> array([[0.44529968, 0.42451167, 0.07463199],
    [0.35787143, 0.22926186, 0.34583839],
    [0.92811531, 0.6180391 , 0.71969461],
    [0.00564108, 0.55381637, 0.17155987]])
m3.shape
>> (4,3)

# axis = 1
m4 = tf.concat([m1,m2],axis=1)
m4
>>array([[0.44529968, 0.42451167, 0.07463199, 0.92811531, 0.6180391 ,
    0.71969461],
    [0.35787143, 0.22926186, 0.34583839, 0.00564108, 0.55381637,
    0.17155987]])
m4.shape
>>(2,6)

但这实际上这只有在我们的输入是二维矩阵时才可以这样理解。axis的实际含义是根据axis指定的维度进行连接,如矩阵m1的维度为(2,3), 那么axis=0就代表了第一个维度‘2',因此,将m1和m2按照第一个维度进行连接,得到的新的矩阵就是将第一维度进行相加,其余维度不变,即维度变成了(4,3).

同理,axis=1时就是将矩阵的第二维度进行合并,其余维度不变,即维度变成了(2,6)。

接下来处理三个维度的数据,这也是我们在神经网络数据中经常要用到的,增加的一个维度通常代表了batch_size. 如下面的m5, batch_size=5, 可以理解为每个样本是个2*3的矩阵,一次将5个样本放在一起。

m5 = np.random.rand(5,2,3)
m6 = np.random.rand(5,2,3)
m5
>>array([[[0.04347217, 0.03368232, 0.36017024],
    [0.74223151, 0.06609717, 0.38155531]],

    [[0.50602728, 0.355745 , 0.93379797],
    [0.97572621, 0.53745311, 0.66461841]],

    [[0.92832972, 0.02441683, 0.48436203],
    [0.69651043, 0.24194495, 0.64623769]],

    [[0.66667596, 0.60053027, 0.2970753 ],
    [0.13281764, 0.29326326, 0.32393028]],

    [[0.40892782, 0.48516547, 0.02298178],
    [0.51239083, 0.40151008, 0.29913204]]])
m6
>>array([[[0.58001909, 0.56925704, 0.09798246],
    [0.20841893, 0.62683633, 0.17923217]],

    [[0.91216164, 0.0200782 , 0.3986682 ],
    [0.86687006, 0.83730576, 0.48443545]],

    [[0.65641654, 0.59786311, 0.2055584 ],
    [0.65391822, 0.74093133, 0.02416627]],

    [[0.80778861, 0.22644312, 0.91610686],
    [0.0789411 , 0.86955002, 0.41437046]],

    [[0.97821668, 0.97118328, 0.97714882],
    [0.21543173, 0.06964724, 0.35360077]]])

在这种情况下,axis=0代表的第一个维度的含义就不再是之前认为的行的概念了,现在m5的第一维度的值是5,代表的是batch_size。仍然按照之前的理解,如果设置axis=0, axis=0就是将第一维度进行相加,其余维度不变,因此我们可以得到新的维度为(10,2,3)。

m7 = tf.concat([m5, m6],axis=0)
m7
>> array([[[0.04347217, 0.03368232, 0.36017024],
    [0.74223151, 0.06609717, 0.38155531]],

    [[0.50602728, 0.355745 , 0.93379797],
    [0.97572621, 0.53745311, 0.66461841]],

    [[0.92832972, 0.02441683, 0.48436203],
    [0.69651043, 0.24194495, 0.64623769]],

    [[0.66667596, 0.60053027, 0.2970753 ],
    [0.13281764, 0.29326326, 0.32393028]],

    [[0.40892782, 0.48516547, 0.02298178],
    [0.51239083, 0.40151008, 0.29913204]],

    [[0.58001909, 0.56925704, 0.09798246],
    [0.20841893, 0.62683633, 0.17923217]],

    [[0.91216164, 0.0200782 , 0.3986682 ],
    [0.86687006, 0.83730576, 0.48443545]],

    [[0.65641654, 0.59786311, 0.2055584 ],
    [0.65391822, 0.74093133, 0.02416627]],

    [[0.80778861, 0.22644312, 0.91610686],
    [0.0789411 , 0.86955002, 0.41437046]],

    [[0.97821668, 0.97118328, 0.97714882],
    [0.21543173, 0.06964724, 0.35360077]]])
m7.shape
>>(10,2,3)

同理,也可以进行axis=1, axis=2的concat操作。

此外,axis的值也可以设置为负数,如axis=-1实际上就是指倒数第一个维度,如m5的倒数第一个维度的值就是‘3'。因此,axis=2的操作和axis=-1的操作是等价的。

以上这篇tf.concat中axis的含义与使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python解析json实例方法
Nov 19 Python
Python isinstance函数介绍
Apr 14 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
python assert的用处示例详解
Apr 01 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
Apr 18 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
Python内存映射文件读写方式
Apr 24 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 #Python
Python for循环通过序列索引迭代过程解析
Feb 07 #Python
python中with用法讲解
Feb 07 #Python
如何基于Python实现数字类型转换
Feb 07 #Python
Python while循环使用else语句代码实例
Feb 07 #Python
Python matplotlib画曲线例题解析
Feb 07 #Python
python next()和iter()函数原理解析
Feb 07 #Python
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
Python实现的简单排列组合算法示例
2018/07/04 Python
python实现简单日期工具类
2019/04/24 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Django nginx配置实现过程详解
2020/09/10 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
Banana Republic欧盟:美国都市简约风格的代表品牌
2018/05/09 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
销售工作人员的自我评价分享
2013/11/10 职场文书
大学生实习思想汇报
2014/01/12 职场文书
2014新年寄语
2014/01/20 职场文书
学历公证委托书
2014/04/09 职场文书
局火灾防控工作方案
2014/05/25 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
2014年维修工作总结
2014/11/22 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
保险内勤岗位职责
2015/04/13 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
Jsonp劫持学习
2021/04/01 PHP