2

Tensorflow 中的张量转置示例

 7 months ago
source link: https://www.jdon.com/72515.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Tensorflow 中的张量转置示例

张量转置是 TensorFlow 中的一项基本操作,它根据指定的排列重新排列张量的维度。此操作在各种机器学习算法数据操作任务中至关重要。

张量在处理多维数据(例如图像、时间序列和序列)时非常有用。转置张量会改变其维度的顺序,从而提供数据操作和计算的灵活性。
在本文中,我们将通过示例来学习 TensorFlow 中的 Tensor Transpose。

语法:
tf.transpose(

a, perm=None, conjugate=False, name=’transpose’

  • a:输入张量
  • perm:维数排列。如果未提供,默认排列方式为(n-1...0),其中 n 是输入张量的秩。
  • conjugate:共轭:复张量的可选参数。如果设置为 True 且张量 dtype 为 complex64 或 complex128,数值将被共轭和转置。
  • name:操作名称的可选参数。

转置二维张量
在这里,我们使用 NumPy 模块创建了一个随机张量。我们将张量的维数定义为 2×3。我们使用 tf.constant() 函数创建了一个具有指定值的常量张量。然后,我们使用 tf.tensor() 函数对二维张量进行转置。最后打印出原始矩阵及其转置矩阵。原始矩阵是由随机整数组成的 2×3 矩阵,转置操作将行和列互换,得到一个 3×2 矩阵。

import numpy as np
import tensorflow as tf

# Define the dimensions of the random matrix
num_rows = 2
num_cols = 3

# Define the range of integers
min_value = 0
max_value = 50 # Adjust as needed

# Generate a tensor
tensor = np.random.randint(min_value, max_value + 1, size=( num_rows, num_cols))
tensor = tf.constant(matrix)
Transpose the tensor 
transposed_tensor= tf.transpose(tensor)

打印原始矩阵和矩阵的转置 ;
print("Tensor:")
print(tensor)
print("Transpose of Tensor")
print(transposed_tensor)

Output:

Tensor:

tf.Tensor(
[[[40 41]
  [13  1]]
 [[22 13]
  [ 4  1]]
 [[25 21]
  [35 24]]], shape=(3, 2, 2), dtype=int64)
Transpose of Tensor
tf.Tensor(
[[[40 22 25]
  [13  4 35]]
 [[41 13 21]
  [ 1  1 24]]], shape=(2, 2, 3), dtype=int64)

用共轭变换复数张量
在这里,我们使用 NumPy 和 TensorFlow 生成一个复数张量。它定义了张量的维数、实部和虚部的取值范围,然后创建了复数张量。将其转换为 TensorFlow 常量后,代码会对张量进行转置,同时使用 TensorFlow 的 tf.transpose() 函数对其元素进行共轭,共轭conjugate=True。最后,代码会打印出原始张量和经过共轭转置的张量。

import numpy as np

# 定义复矩阵的维数
num_rows = 3
num_cols = 3

range 
min_val = 0
max_val = 50

# 生成复数张量 ;
complex_tensor = np.random.randint(min_val, max_val +1, size=(num_rows, num_cols))+ 1j * np.random.randint(min_val, max_val,size=(num_rows, num_cols))
tensor = tf.constant(complex_tensor)

print("tensor of complex numbers: ")
print(tensor)

# 对张量进行共轭变换
transposed_conj_x = tf.transpose(tensor, conjugate=True)
print("Transposed Conjugate tensor:")
print(transposed_conj_x)
tensor of complex numbers: 
tf.Tensor(
[[15. +9.j 12.+27.j 19.+46.j]
 [45.+48.j 16.+21.j 49.+27.j]
 [12. +5.j  1.+45.j 32.+46.j]], shape=(3, 3), dtype=complex128)
Transposed Conjugate tensor:
tf.Tensor(
[[15. -9.j 45.-48.j 12. -5.j]
 [12.-27.j 16.-21.j  1.-45.j]
 [19.-46.j 49.-27.j 32.-46.j]], shape=(3, 3), dtype=complex128)

转置三维张量
在这里,我们创建了一个名为 tensor 的三维张量。我们使用 tf.constant() 函数创建了一个具有指定值的常量张量。张量 x 的形状为 (2, 2, 3),这意味着它包含两个 2×3 矩阵。

然后,我们使用 tf.transpose() 函数对张量进行转置,并使用 permutation [0, 2, 1],这意味着我们要交换张量的二维和三维。因此,每个 2×3 矩阵中的行和列都进行了转置。

最后,它会打印出原始张量及其换置后的版本。

import numpy as np

# Define the dimensions of the 3D tensor
depth = 2
rows = 2
cols = 3

# Define the range of integers
min_value = 0
max_value = 50 # Adjust as needed

# Generate a 3D tensor of random integers
tensor = np.random.randint(min_value, max_value + 1, size=(depth, rows, cols))

# Print the generated 3D tensor
print("Tensor:")
print(tensor)

# Transpose the tensor 
transposed_x = tf.transpose(tensor, perm=[0, 2, 1])
print("Transpose of tensor:")
print(transposed_x.numpy())

输出:
Tensor:
[[[19 39 29]
  [25 14 34]]
 [[ 8 16 31]
  [11 41  6]]]
Transpose of tensor:
[[[19 25]
  [39 14]
  [29 34]]
 [[ 8 11]
  [16 41]
  [31  6]]]

使用批量维度平移张量
在这里,我们创建一个具有批量维度的张量。该张量包含三个 2×2 矩阵,代表一批数据样本。每个 2×2 矩阵对应一个数据样本。

然后,我们使用 tf.transpose() 函数对张量进行转置,并使用 permutation [1, 0, 2],这意味着我们要交换张量的第一维度和第二维度。这样,批次维度和特征维度就互换了。

import tensorflow as tf

# Define a tensor with a batch dimension
depth = 3
rows = 2
cols = 2
range
min_value = 0
max_value = 50 # Adjust as needed

# Generate a 3D tensor of random integers
tensor = tf.constant(np.random.randint(min_value, max_value + 1, size=(depth, rows, cols)))

print("tensor:")
print(tensor)

# 平移张量,交换批次维度和特征维度
transposed_x = tf.transpose(tensor, perm=[1, 0, 2])
print("transpose of tensor:")
print(transposed_x.numpy())

输出:
tensor:
tf.Tensor(
[[[23  8]
  [37 13]]
 [[41 20]
  [37 20]]
 [[48 13]
  [11 37]]], shape=(3, 2, 2), dtype=int64)
transpose of tensor:
[[[23  8]
  [41 20]
  [48 13]]
 [[37 13]
  [37 20]
  [11 37]]]

转置高维张量
张量包含两组 2×2 矩阵,以 2x2x2x2 结构排列。这意味着我们有两组 2×2 矩阵,每组矩阵沿两个维度排列。

然后,我们使用 tf.transpose() 函数对张量进行转置,并使用 permutation [0, 2, 1, 3],这意味着我们要重新排列张量的维数。第一维和第三维互换,第二维保持不变。

import tensorflow as tf

# Define a 4D tensor
x = tf.constant([[[[1, 2],
                [3, 4]],
                [[5, 6],
                [7, 8]]],
                [[[9, 10],
                [11, 12]],
                [[13, 14],
                [15, 16]]]])

平移张量以改变维数顺序
transposed_x = tf.transpose(x, perm=[0, 2, 1, 3])

print("Transposed 4D Tensor:")
print(transposed_x.numpy())

输出:
Transposed 4D Tensor:
[[[[ 1  2]
   [ 5  6]]
  [[ 3  4]
   [ 7  8]]]
 [[[ 9 10]
   [13 14]]
  [[11 12]
   [15 16]]]]

结论
总之,张量转置是 TensorFlow 中用于重新排列张量维度的基本操作。在本文中,我们学习了二维、复数、三维和高维张量的转置。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK