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采集博客中上传的QQ截图文件
Jul 18 Python
Python 类的继承实例详解
Mar 25 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
对命令行模式与python交互模式介绍
May 12 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python实点云分割k-means(sklearn)详解
May 28 Python
浅析Python 责任链设计模式
Sep 11 Python
Python字典取键、值对的方法步骤
Sep 30 Python
python的dict判断key是否存在的方法
Dec 09 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
destoon设置自定义搜索的方法
2014/06/21 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
python内存管理分析
2015/04/08 Python
Python下的twisted框架入门指引
2015/04/15 Python
python对象及面向对象技术详解
2016/07/19 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
幼儿园实习自我鉴定
2013/12/15 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
天网工程实施方案
2014/03/26 职场文书
Java获取字符串编码格式实现思路
2022/09/23 Java/Android