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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
python实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
python自定义解析简单xml格式文件的方法
May 11 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
python实现日常记账本小程序
Mar 10 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
超简单的Python HTTP服务
Jul 22 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
深入了解Python 变量作用域
Jul 24 Python
Django 实现图片上传和下载功能
Dec 31 Python
Python 中 Shutil 模块详情
Nov 11 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的变量总结 新手推荐
2011/04/18 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
2018/02/22 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
Python专用方法与迭代机制实例分析
2014/09/15 Python
python简单实现旋转图片的方法
2015/05/30 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
python实现智能语音天气预报
2019/12/02 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
竞争上岗演讲稿
2014/01/05 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
写给老婆的保证书
2015/02/27 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
农村党支部承诺书
2015/04/30 职场文书
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电