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中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 Python
python实现的文件同步服务器实例
Jun 02 Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
matplotlib作图添加表格实例代码
Jan 23 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python使用Matplotlib画饼图
Sep 25 Python
python使用epoll实现服务端的方法
Oct 16 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
Python实现屏幕录制功能的代码
Mar 02 Python
python3.7调试的实例方法
Jul 21 Python
python基于openpyxl生成excel文件
Dec 23 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简介
2006/10/09 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
jquery使用经验小结
2015/05/20 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
node实现简单的反向代理服务器
2017/07/26 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
tensorflow识别自己手写数字
2018/03/14 Python
解决Pycharm无法import自己安装的第三方module问题
2018/05/18 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python实现维吉尼亚算法
2019/03/20 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
销售辞职报告范文
2014/01/12 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
联谊活动策划书
2014/01/26 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
MySQL七大JOIN的具体使用
2022/02/28 MySQL
httpclient调用远程接口的方法
2022/08/14 Java/Android