tensorflow 张量操作基础
张量是tensorflow中的核心数据结构,可以理解为多维数组。张量的秩表示其维度数量,例如标量是0维张量,向量是1维张量,矩阵是2维张量。
import tensorflow as tf # 创建标量 scalar = tf.constant(5) # 创建向量 vector = tf.constant([1, 2, 3]) # 创建矩阵 matrix = tf.constant([[1, 2], [3, 4]]) # 创建3维张量 tensor = tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
张量创建方法
tensorflow提供了多种创建张量的方式,包括从python列表、numpy数组创建,以及生成特定模式的张量。
# 从python列表创建 tensor_from_list = tf.convert_to_tensor([1, 2, 3]) # 从numpy数组创建 import numpy as np array = np.array([[1, 2], [3, 4]]) tensor_from_np = tf.convert_to_tensor(array) # 生成全零张量 zeros = tf.zeros([2, 3]) # 生成全一张量 ones = tf.ones([3, 2]) # 生成随机正态分布张量 randn = tf.random.normal([2, 2], mean=0.0, stddev=1.0) # 生成均匀分布张量 randu = tf.random.uniform([3, 3], minval=0, maxval=1)
张量数学运算
张量支持各种数学运算,包括逐元素运算和矩阵运算。
a = tf.constant([[1, 2], [3, 4]]) b = tf.constant([[5, 6], [7, 8]]) # 逐元素加法 add = tf.add(a, b) # 逐元素乘法 mul = tf.multiply(a, b) # 矩阵乘法 matmul = tf.matmul(a, b) # 张量求和 sum_all = tf.reduce_sum(a) sum_axis0 = tf.reduce_sum(a, axis=0) sum_axis1 = tf.reduce_sum(a, axis=1) # 张量平均值 mean = tf.reduce_mean(a) # 张量最大值 max_val = tf.reduce_max(a)
张量形状操作
改变张量形状是常见的操作,tensorflow提供了多种形状操作方法。
tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # 获取张量形状 shape = tensor.shape # 改变张量形状 reshaped = tf.reshape(tensor, [2, 3]) # 转置张量 transposed = tf.transpose(tensor) # 扩展维度 expanded = tf.expand_dims(tensor, axis=0) # 压缩维度 squeezed = tf.squeeze(expanded)
张量索引和切片
tensorflow支持类似numpy的索引和切片操作。
tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 获取单个元素 elem = tensor[1, 2] # 获取第2行第3列的元素 # 获取行切片 row_slice = tensor[1:, :] # 获取第2行及以后的所有行 # 获取列切片 col_slice = tensor[:, 1] # 获取第2列 # 使用步长切片 strided_slice = tensor[::2, ::2] # 每隔2个元素取一个
张量广播机制
tensorflow支持广播机制,允许不同形状的张量进行运算。
a = tf.constant([[1, 2, 3]]) # 形状(1,3) b = tf.constant([[4], [5], [6]]) # 形状(3,1) # 广播加法 c = a + b # 结果形状(3,3)
张量聚合操作
tensorflow提供了多种聚合操作函数。
tensor = tf.constant([[1, 2, 3], [4, 5, 6]]) # 沿轴0求和 sum0 = tf.reduce_sum(tensor, axis=0) # [5,7,9] # 沿轴1求最大值 max1 = tf.reduce_max(tensor, axis=1) # [3,6] # 计算逻辑与 logical = tf.reduce_all(tensor > 3) # false # 计算均值 mean = tf.reduce_mean(tensor) # 3.5
张量拼接与分割
tensorflow支持张量的拼接和分割操作。
a = tf.constant([[1, 2], [3, 4]]) b = tf.constant([[5, 6], [7, 8]]) # 沿轴0拼接 concat0 = tf.concat([a, b], axis=0) # 沿轴1拼接 concat1 = tf.concat([a, b], axis=1) # 张量分割 split0 = tf.split(a, num_or_size_splits=2, axis=0) split1 = tf.split(a, num_or_size_splits=[1, 1], axis=1)
张量排序操作
tensorflow提供了排序和top-k操作。
tensor = tf.constant([[3, 1, 4], [1, 5, 9]]) # 排序 sorted_values, sorted_indices = tf.sort(tensor, direction='descending') # argsort argsort = tf.argsort(tensor) # top-k top_k_values, top_k_indices = tf.math.top_k(tensor, k=2)
张量高级操作
tensorflow还提供了一些高级张量操作。
# 张量收集 tensor = tf.constant([[0, 1, 2], [3, 4, 5]]) indices = tf.constant([0, 1]) gathered = tf.gather(tensor, indices) # 收集第0行和第1行 # 张量分散 updates = tf.constant([10, 20]) scattered = tf.tensor_scatter_nd_update(tensor, [[0, 0], [1, 1]], updates) # 张量条件操作 cond = tf.where(tensor > 3, tensor, tf.zeros_like(tensor)) # 大于3保留原值,否则设为0
张量梯度计算
tensorflow支持自动微分,可以计算张量操作的梯度。
x = tf.variable(3.0) with tf.gradienttape() as tape: y = x ** 2 + 2 * x + 1 dy_dx = tape.gradient(y, x) # 2x + 2 = 8
张量与numpy互操作
tensorflow张量和numpy数组可以方便地相互转换。
# 张量转numpy数组 tensor = tf.constant([[1, 2], [3, 4]]) numpy_array = tensor.numpy() # numpy数组转张量 new_tensor = tf.convert_to_tensor(numpy_array)
到此这篇关于tensorflow 张量操作的实现的文章就介绍到这了,更多相关tensorflow 张量操作内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论