TensorFlow深度学习之实现合并与分割的示例代码

 更新时间:2023年07月02日 10:57:51   作者:畅游星辰大海  
这篇文章主要为大家详细介绍了TensorFlow中实现合并与分割的四位函数以及它们的用法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

写在前面

本文主要介绍了如下四个函数的参数意义及其函数用法,如有不恰当的地方,还请不吝指正!!!

  • tf.concat( )
  • tf.stack( )
  • tf.unstack( )
  • tf.split( )

一、tf.concat( )函数

( 1 )简单介绍

tf.concat() 函数是 TensorFlow 中用于连接张量的函数。它可以将多个张量沿指定的轴连接在一起,形成一个新的张量。

tf.concat(values, axis)

  • values 是一个张量列表[tensor1, tensor2, tensor3, ...],表示需要连接的张量。
  • axis 是一个整数,可正可负,表示连接轴的方向。

( 2 )学会使用

分别定义两个二维,形状 shape = (2, 3) 的张量,使它们在第一个维度上面拼接,

将第一个维度的中括号打开:

[ [1, 2, 3], [4, 5, 6] ] ——> [1, 2, 3], [4, 5, 6]

[ [7, 8, 9], [10, 11, 12] ] ——> [7, 8, 9], [10, 11, 12]

合并后中括号还原:

[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ——> [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ]

import tensorflow as tf
tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) 
tensor2 = tf.constant([[7, 8, 9], [10, 11, 12]])
tensor = tf.concat([tensor1, tensor2], 0)
print(tensor.shape) # (4, 3)

如果将上面的两个张量在第2个维度上面拼接,又该怎样做呢?

在第二个维度的拼接,不干扰第一个维度的张量,

将第二个维度的中括号打开:

[ [1, 2, 3], [4, 5, 6] ] ——> [ 1, 2, 3, 4, 5, 6]

[ [7, 8, 9], [10, 11, 12] ] ——> [ 7, 8, 9, 10, 11, 12]

将1, 2, 3与7, 8, 9对应,将4, 5, 6与10, 11, 12对应拼接,合并后中括号还原

[ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 10, 11, 12] ——> [ [ 1, 2, 3, 7, 8, 9], [ 4, 5, 6, 10, 11, 12] ]

再举一个例子,还是这个三维的张量理解成【班级,学生,科目】,axis 分别对应0, 1, 2,或-3, -2, -1

import tensorflow as tf
# 收集4个班级35名学生的8个科目的成绩
tensor1 = tf.ones([4, 35, 8])
# 收集2个班级35名学生的8个科目的成绩
tensor2 = tf.ones([2, 35, 8])
# 在班级维度上拼接张量,
tensor = tf.concat([tensor1, tensor2], axis=0)
print(tensor.shape)  # 输出:(6, 35, 8)

理解方式和上面的方法相同,如果单看结果还是很简单的

此函数操作后不产生新的维度,下面的stack()函数就会产生新的维度

二、tf.stack( )函数

( 1 )简单介绍

tf.stack() 函数用于沿新的维度堆叠张量。这个新维度将用于堆叠其他张量。

tf.stack(values, axis=0,)

  • values: 是一个张量列表[tensor1, tensor2, tensor3, ...],表示需要连接的张量,它们将沿着新的维度堆叠在一起。这些张量应该有相同的形状。
  • axis: 一个整数,可正可负,表示沿哪个维度堆叠张量。

( 2 )代码示例

import tensorflow as tf
# 创建两个形状都为 [2, 3] 的张量
tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]])
tensor2 = tf.constant([[7, 8, 9], [10, 11, 12]])
# 使用 tf.stack() 函数沿 axis = 0 将两个张量堆叠在一起
stacked_tensor = tf.stack([tensor1, tensor2], axis=0)
print(stacked_tensor)
# 输出
tf.Tensor(
[[[ 1  2  3]
  [ 4  5  6]]
 [[ 7  8  9]
  [10 11 12]]], shape=(2, 2, 3), dtype=int32)

三、tf.unstack( )函数

tf.unstack() 用于将输入的 Tensor 张量沿着指定的轴(axis)进行分解。将指定维度全部拆分,该维度的shape是多少就拆分多少个。

tf.unstack(value, axis)

  • value: 一个多维 Tensor 张量。
  • axis: 一个整数,表示要将输入 Tensor 张量沿哪个轴(axis)进行分解。如果 axis 的值为负数,则从反向轴(倒数轴)开始分解。如果同时提供了 axis 和 num 参数,则优先使用 axis 参数。

( 2 )重点理解

tf.unstack 的作用是将输入的 Tensor 张量沿着指定的轴(axis)分解成多个 Tensor 张量。例如,如果输入的 Tensor 张量形状为 [2, 4, 35, 8],沿轴 8(第四维)进行分解,则会得到8个形状为 [2, 4, 35] 的 Tensor 张量。

import tensorflow as tf
tensor1 = tf.ones([4, 35, 8])
tensor = tf.unstack(tensor1, axis=2)
print(tensor[0].shape, tensor[3].shape, tensor[7].shape)
# 输出:(4, 35) (4, 35) (4, 35)

四、tf.split( )函数

tf.split() 用于将一个张量(tensor)沿着指定的轴(axis)拆分为多个子张量。对比于tf.unstack()函数将某个维度一个个拆分,tf.split()就能实现根据自己的需求拆分。

tf.split(value, num_or_size_splits, axis)

  • value: 一个多维张量。
  • num_or_size_splits: 要拆分的张量数量或每个拆分的大小。可以是一个整数(表示拆分的数量)或一个一维张量(表示每个拆分的大小)。
  • axis: 一个整数,表示沿着哪个轴进行拆分。

1.num_or_size_splits为数字的情况

import tensorflow as tf
tensor1 = tf.ones([2, 4, 35, 8])
# 拆分为2个形状为[2, 4, 35, 4]的张量
tensor = tf.split(tensor1, axis=3, num_or_size_splits=2)
print(tensor[0].shape, tensor[1].shape)  # 输出:[2, 4, 35, 4] [2, 4, 35, 4] 

2.num_or_size_splits为一维向量的情况

import tensorflow as tf
tensor1 = tf.ones([2, 4, 35, 8])
# 在第三个轴上,按照2 / 2 / 4 形状拆分的张量
tensor = tf.split(tensor1, axis=3, num_or_size_splits=[2, 2, 4])
print(tensor[0].shape, tensor[1].shape, tensor[2].shape)
#  输出:(2, 4, 35, 2) (2, 4, 35, 2) (2, 4, 35, 4)

到此这篇关于TensorFlow深度学习之实现合并与分割的示例代码的文章就介绍到这了,更多相关TensorFlow合并 分割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python OpenCV学习之图像形态学

    Python OpenCV学习之图像形态学

    形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果。本文将为大家详细介绍一下OpenCV中的图像形态学,感兴趣的可以了解一下
    2022-01-01
  • python机器学习deepchecks库训练检查模型特点探索

    python机器学习deepchecks库训练检查模型特点探索

    这篇文章主要介绍了python机器学习deepchecks库的训练检查模型特点实例探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • Python详细介绍模型封装部署流程

    Python详细介绍模型封装部署流程

    本文实例讲述了Python模型封装部署的原理与实现方法。封装即是隐藏对象的属性和实现细节,仅对外提供公共访问方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • python编程使用协程并发的优缺点

    python编程使用协程并发的优缺点

    协程是一种用户态的轻量级线程,又称微线程。这篇文章主要介绍了python编程使用协程并发的优缺点,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • 利用Pandas读取表格行数据判断是否相同的方法

    利用Pandas读取表格行数据判断是否相同的方法

    这篇文章主要给大家介绍了关于利用Pandas读取表格行数据判断是否相同的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Anaconda 查看、创建、管理和使用python环境的方法

    Anaconda 查看、创建、管理和使用python环境的方法

    这篇文章主要介绍了Anaconda 查看、创建、管理和使用python环境的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 在Django下创建项目以及设置settings.py教程

    在Django下创建项目以及设置settings.py教程

    今天小编就为大家分享一篇在Django下创建项目以及设置settings.py教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python疲劳驾驶困倦低头检测功能的实现

    python疲劳驾驶困倦低头检测功能的实现

    这篇文章主要介绍了python疲劳驾驶困倦低头检测,该系统可以检测一个人在开车时是否困倦,及时提醒,做到安全隐患排查,对实现代码感兴趣的朋友一起看看吧
    2022-04-04
  • Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space

    Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space

    今天遇到一个问题,使用python的find函数寻找字符串中的第一个空格时没有找到正确的位置,下面是解决方法,需要的朋友可以参考下
    2020-02-02
  • 使用Python对SQLite数据库操作

    使用Python对SQLite数据库操作

    本文主要介绍了Python对SQLite数据库操作的简单教程。SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以集成。
    2017-04-04

最新评论