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使用CMD模块更优雅的运行脚本

    Python使用CMD模块更优雅的运行脚本

    这篇文章主要介绍了Python使用CMD模块更优雅的运行脚本的方法,实例分析了Python中cmd模块的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • Python赋值语句后逗号的作用分析

    Python赋值语句后逗号的作用分析

    这篇文章主要介绍了Python赋值语句后逗号的作用,实例分析了Python赋值语句加入逗号实现类型转换的技巧,需要的朋友可以参考下
    2015-06-06
  • Python中list初始化方法示例

    Python中list初始化方法示例

    这篇文章主要介绍了Python中list初始化方法,分析了list初始化常用的方法与相关使用注意事项,需要的朋友可以参考下
    2016-09-09
  • Python3 jupyter notebook 服务器搭建过程

    Python3 jupyter notebook 服务器搭建过程

    这篇文章主要介绍了Python3 jupyter notebook 服务器搭建过程,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-11-11
  • 基于tensorflow加载部分层的方法

    基于tensorflow加载部分层的方法

    今天小编就为大家分享一篇基于tensorflow加载部分层的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • keras中的卷积层&池化层的用法

    keras中的卷积层&池化层的用法

    这篇文章主要介绍了keras中的卷积层&池化层的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python类的多重继承问题深入分析

    Python类的多重继承问题深入分析

    昨天在Python类的多重继承那里纠结了好久,咨询了不少高手之后,才完全搞明白,现在把类的特性整理下,供以后参考,也给有需要的小伙伴们参考下
    2014-11-11
  • Python 的 with 语句详解

    Python 的 with 语句详解

    这篇文章主要介绍了Python 的 with 语句,本文详细讲解了with语句、with语句的历史、with语句的使用例子等,需要的朋友可以参考下
    2014-06-06
  • 利用Anaconda创建虚拟环境的全过程

    利用Anaconda创建虚拟环境的全过程

    因为多次重新配置环境,这些命令每次都要用,每次都忘记,需要重新搜索,所以记录这一过程,下面这篇文章主要给大家介绍了关于利用Anaconda创建虚拟环境的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • python里使用正则的findall函数的实例详解

    python里使用正则的findall函数的实例详解

    这篇文章主要介绍了python里使用正则的findall函数的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10

最新评论