python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > TensorFlow合并 分割

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

作者:畅游星辰大海

这篇文章主要为大家详细介绍了TensorFlow中实现合并与分割的四位函数以及它们的用法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

写在前面

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

一、tf.concat( )函数

( 1 )简单介绍

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

tf.concat(values, 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,)

( 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)

( 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)

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合并 分割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文