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 相关文章推荐
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
MySQL最常见的操作语句小结
May 07 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
Python如何发布程序的详细教程
Oct 09 Python
python pyheatmap包绘制热力图
Nov 09 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
pandas中DataFrame检测重复值的实现
May 26 Python
Python如何加载模型并查看网络
Jul 15 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
php dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
php中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP父类调用子类方法的代码例子
2014/04/09 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
JS 滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件
2016/10/10 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
jquery 手势密码插件
2017/03/17 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
js布局实现单选按钮控件
2020/01/17 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现高效求解素数代码实例
2015/06/30 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
如何基于Python + requests实现发送HTTP请求
2020/01/13 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
实现向右循环移位
2014/07/31 面试题
工作失误检讨书(3篇)
2014/10/11 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
python迷宫问题深度优先遍历实例
2021/06/20 Python