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实现多行注释的另类方法
Aug 22 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
python中 logging的使用详解
Oct 25 Python
Python语言的变量认识及操作方法
Feb 11 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
Django如何配置mysql数据库
May 04 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
Python中pymysql 模块的使用详解
Aug 12 Python
解决json中ensure_ascii=False的问题
Apr 03 Python
python3.6使用SMTP协议发送邮件
May 20 Python
Python如何实现FTP功能
May 28 Python
Python天气语音播报小助手
Sep 25 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 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
php过滤敏感词的示例
2014/03/31 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
2017/08/17 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
python批量提取word内信息
2015/08/09 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Golang与python线程详解及简单实例
2017/04/27 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
详解Python做一个名片管理系统
2019/03/14 Python
python提取xml里面的链接源码详解
2019/10/15 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
python 实现批量图片识别并翻译
2020/11/02 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
考研英语复习计划
2015/01/19 职场文书
企业介绍信范文
2015/01/30 职场文书
人工作失职检讨书
2015/05/05 职场文书
Django集成富文本编辑器summernote的实现步骤
2021/05/31 Python
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server