您的位置:首页 > 其它

TensorFlow2基本操作之合并分割与统计

2021-09-13 04:07 726 查看
目录
  • 数据统计
  • 合并与分割

    tf.concat

    tf.concat可以帮助我们实现拼接操作.

    格式:

    tf.concat(
    values, axis, name='concat'
    )

    参数:

    • values: 一个 tensor 或 tensor list
    • axis: 操作的维度
    • name: 数据名称, 默认为 “concat”

    例子:

    part_1 = tf.zeros([5, 3])
    print(part_1)
    
    part_2 = tf.ones([5, 3])
    print(part_2)
    
    # 竖向拼接
    result_1 = tf.concat([part_1, part_2], axis=0)
    print(result_1)
    
    # 横向拼接
    result_2 = tf.concat([part_1, part_2], axis=1)
    print(result_2)

    输出结果:

    tf.Tensor(
    [[0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]], shape=(5, 3), dtype=float32)
    tf.Tensor(
    [[1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]], shape=(5, 3), dtype=float32)
    tf.Tensor(
    [[0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]], shape=(10, 3), dtype=float32)
    tf.Tensor(
    [[0. 0. 0. 1. 1. 1.]
    [0. 0. 0. 1. 1. 1.]
    [0. 0. 0. 1. 1. 1.]
    [0. 0. 0. 1. 1. 1.]
    [0. 0. 0. 1. 1. 1.]], shape=(5, 6), dtype=float32)

    tf.stack

    rf.stack可以创建一个新的维度来合并两个张量.

    格式:

    tf.stack(
    values, axis=0, name='stack'
    )

    参数:

    • values: 一个 tensor list
    • axis: 操作的维度
    • name: 数据名称, 默认为 “stack”

    例子:

    part_1 = tf.zeros([5, 3])
    print(part_1)
    
    part_2 = tf.ones([5, 3])
    print(part_2)
    
    # 头拼接
    result_1 = tf.stack([part_1, part_2], axis=0)
    print(result_1)
    
    # 尾拼接
    result_2 = tf.stack([part_1, part_2], axis=2)
    print(result_2)

    输出结果:

    tf.Tensor(
    [[0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]], shape=(5, 3), dtype=float32)
    tf.Tensor(
    [[1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]], shape=(5, 3), dtype=float32)
    tf.Tensor(
    [[[0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]]

    [[1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]]], shape=(2, 5, 3), dtype=float32)
    tf.Tensor(
    [[[0. 1.]
    [0. 1.]
    [0. 1.]]

    [[0. 1.]
    [0. 1.]
    [0. 1.]]

    [[0. 1.]
    [0. 1.]
    [0. 1.]]

    [[0. 1.]
    [0. 1.]
    [0. 1.]]

    [[0. 1.]
    [0. 1.]
    [0. 1.]]], shape=(5, 3, 2), dtype=float32)

    tf.unstack

    tf.unstack是一个矩阵分解函数.

    格式:

    # unstack
    tf.unstack(
    value, num=None, axis=0, name='unstack'
    )

    参数:

    • values: 一个 tensor, 维度大于 0
    • num: 轴的长度
    • axis: 操作的维度
    • name: 数据名称, 默认为 “unstack”

    例子:

    a = tf.stack([tf.zeros([5, 3]), tf.ones([5, 3])], axis=0)
    print(a)
    
    b = tf.unstack(a, axis=0)
    print(b)

    输出结果:

    tf.Tensor(
    [[[0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]]

    [[1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]]], shape=(2, 5, 3), dtype=float32)
    [<tf.Tensor: shape=(5, 3), dtype=float32, numpy=
    array([[0., 0., 0.],
    [0., 0., 0.],
    [0., 0., 0.],
    [0., 0., 0.],
    [0., 0., 0.]], dtype=float32)>, <tf.Tensor: shape=(5, 3), dtype=float32, numpy=
    array([[1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.]], dtype=float32)>]

    tf.split

    tf.split()可以把一个张量划分为几个子张量.

    格式:

    tf.split(
    value, num_or_size_splits, axis=0, num=None, name='split'
    )

    参数:

    • value: 待切分的张量
    • num_or_size_splits: 切成几份
    • axis: 操作的维度
    • num: num_or_size_splits 不能实现的情况下使用
    • name: 数据名称, 默认为 “split”

    例子:

    # split
    a = tf.stack([tf.zeros([5, 3]), tf.ones([5, 3])], axis=0)
    print(a)
    
    b = tf.split(a, 2)
    print(b)

    输出结果:

    tf.Tensor(
    [[[0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]
    [0. 0. 0.]]

    [[1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]
    [1. 1. 1.]]], shape=(2, 5, 3), dtype=float32)
    [<tf.Tensor: shape=(1, 5, 3), dtype=float32, numpy=
    array([[[0., 0., 0.],
    [0., 0., 0.],
    [0., 0., 0.],
    [0., 0., 0.],
    [0., 0., 0.]]], dtype=float32)>, <tf.Tensor: shape=(1, 5, 3), dtype=float32, numpy=
    array([[[1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.],
    [1., 1., 1.]]], dtype=float32)>]

    数据统计

    tf.norm

    tf.norm可以帮助我们计算向量, 矩阵, 张量的范数.

    格式:

    tf.norm(
    tensor, ord='euclidean', axis=None, keepdims=None, name=None
    )

    参数:

    • tensor: 输入的张量
    • ord: 范数的顺序
    • axis: 操作的维度
    • keep_dims: 如果为 True, 则 axis 中指定的轴将保持为大小 1
    • name: 数据名称

    例子:

    a = tf.fill([2, 2], 2.0)
    print(a)
    
    # sqrt(2^2 * 4) = sqrt(16) = 4
    b = tf.norm(a)
    print(b)
    
    # [2 + 2, 2 + 2] = [4, 4]
    c = tf.norm(a, ord=1, axis= 0)
    print(c)
    
    # [sqrt(2^2 + 2^2), sqrt(2^2 + 2^2)] = [sqrt(8), sqrt(8)]
    d = tf.norm(a, ord=2, axis= 0)
    print(d)

    输出结果:

    tf.Tensor(
    [[2. 2.]
    [2. 2.]], shape=(2, 2), dtype=float32)
    tf.Tensor(4.0, shape=(), dtype=float32)
    tf.Tensor([4. 4.], shape=(2,), dtype=float32)
    tf.Tensor([2.828427 2.828427], shape=(2,), dtype=float32)

    reduce_min/max/mean

    计算一个张量各个维度上元素的最小值 / 最大值 / 平均值.

    格式:

    tf.math.reduce_min / reduce_max / reduce_mean(
    input_tensor, axis=None, keepdims=False, name=None
    )

    参数:

    • input_tensor: 传入的张量
    • axis: 维度, 默认计算所有维度
    • keepdims: 如果为真保留维度, 默认为 False
    • name: 数据名称

    例子:

    a = tf.reshape(tf.range(9), [3, 3])
    print(a)
    
    min = tf.reduce_min(a)
    print(min)
    
    max = tf.reduce_max(a)
    print(max)

    输出结果:

    tf.Tensor(
    [[0 1 2]
    [3 4 5]
    [6 7 8]], shape=(3, 3), dtype=int32)
    tf.Tensor(0, shape=(), dtype=int32)
    tf.Tensor(8, shape=(), dtype=int32)

    argmax / argmin

    tf.argmax/tf.argmin可以帮我们找到最大 / 最小值所在的索引 (index).

    格式:

    tf.math.argmax(
    input, axis=None, output_type=tf.dtypes.int64, name=None
    )

    参数:

    • input: 输入
    • axis: 操作的维度
    • output_type: 输出数据类型, 默认为 int64
    • name: 数据名称

    例子:

    # argmax / argmin
    a = tf.reshape(tf.range(9), [3, 3])
    print(a)
    
    max = tf.argmax(a)
    print(max)
    
    min = tf.argmin(a)
    print(min)

    输出结果:

    tf.Tensor(
    [[0 1 2]
    [3 4 5]
    [6 7 8]], shape=(3, 3), dtype=int32)
    tf.Tensor([2 2 2], shape=(3,), dtype=int64)
    tf.Tensor([0 0 0], shape=(3,), dtype=int64)

    tf.equal

    tf.equal可以帮助我们判断两个张量是否相等. 返回 True / False.

    格式:

    tf.math.equal(
    x, y, name=None
    )

    例子:

    a = tf.zeros(5, dtype=tf.float32)
    print(a)
    
    b = tf.range(5, dtype=tf.float32)
    print(b)
    
    print(tf.equal(a, b))

    输出结果:

    tf.Tensor([0. 0. 0. 0. 0.], shape=(5,), dtype=float32)
    tf.Tensor([0. 1. 2. 3. 4.], shape=(5,), dtype=float32)
    tf.Tensor([ True False False False False], shape=(5,), dtype=bool)

    tf.unique

    tf.unique可以帮我们找出张量中不重复的值

    格式:

    tf.unique(
    x, out_idx=tf.dtypes.int32, name=None
    )

    参数:

    • input: 输入
    • output_type: 输出数据类型, 默认为 int32
    • name: 数据名称

    例子:

    a = tf.range(5)
    print(tf.unique(a))
    
    b = tf.constant([4, 2, 2, 4, 3])
    print(tf.unique(b))

    输出结果:

    Unique(y=<tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>, idx=<tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 2, 3, 4])>)
    Unique(y=<tf.Tensor: shape=(3,), dtype=int32, numpy=array([4, 2, 3])>, idx=<tf.Tensor: shape=(5,), dtype=int32, numpy=array([0, 1, 1, 0, 2])>)

    到此这篇关于一小时学会TensorFlow2基本操作之合并分割与统计的文章就介绍到这了,更多相关TensorFlow2合并分割与统计内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    相关文章推荐