TensorFlow2基本操作之合并分割与统计
作者:我是小白呀 发布时间:2022-01-01 21:47:39
合并与分割
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])>)
来源:https://iamarookie.blog.csdn.net/article/details/117755839


猜你喜欢
- 进程概述? 进程(Process)是计算机中已运行程序的实体。进程与程序不同,程序本身只是指令、数据及器组织形式的描述,进程才是程序(那些指
- 当今互联网时代,数据处理已经成为了一个非常重要的任务。而MySQL作为一款开源的关系型数据库,被广泛应用于各种场景。本篇博客将介绍如何使用P
- 一个例子: print("Loading vgg19 weights...")vgg_mode
- hasattr()函数hasattr()函数用于判断是否包含对应的属性语法:hasattr(object,name)参数:object--对
- 前因后果公司有人阳了,今天在家上班,突然小姨子就问我有没有baidu文库会员,想下载点东西,我心想这还要会员?用Python不是分分钟的事情
- 一、概述全文索引在表中包括一个或多个基于字符的列。这些列可以具有以下任何数据类型:char、varchar、nchar、nvarchar、t
- 在自动化测试过程中,有时后会遇到元素定位方式没有问题,但是依旧抛出无法找到元素的异常的问题,通常情况下,如果元素定位没有问题,但还是无法找到
- 目录用Python写一个简单的通讯录一、构思1、定义空列表和一个空字典来存储2、定义功能选项3、添加通讯录功能4、 循环,调用所有的函数功能
- 遇到一个问题,需要正则匹配远端FTP目录下的文件,如果使用ftp客户端可以通过命令行很容易的做到这一点,但是暂时没有一个工具支持这样的需求,
- 需求有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样。上游跑时会根据配置从源文件中
- 本文实例讲述了python根据给定文件返回文件名和扩展名的方法。分享给大家供大家参考。具体分析如下:这段代码可以根据文件的完整路径返回文件名
- 在大家的日常python程序的编写过程中,都会有自己解决某个问题的解决办法,或者是在程序的调试过程中,用来帮助调试的程序公式。小编通过上万行
- ThreadLocal在threading模块中,可以见得它是为我们的线程服务的。它的主要作用是存储当前线程的变量,各个线程之间的变量名是可
- 删除表数据操作清空所有表记录:TRUNCATE TABLE your_table_name;或者批量删除满足条件的表记录:BEGIN &nb
- # 从X和Y中取出相应步长对应的数组并保存至x_data和y_data中x_data = []y_data = []for i in ran
- ConfigParser模块在Python3修改为configparser,这个模块定义了一个ConfigeParser类,该类的作用是让配
- 协同过滤在 用户 —— 物品(user - item)的数据关系下很容易收集到一些偏好信息(preference),比如评分。利用这些分散的
- 查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效
- 目录一、async二、await:三、综合应用一、asyncasync创建一个异步函数来定义一个代码块,在其中运行异步代码;怎样变成异步函数
- 前言最近在试着研究飞浆平台的许多功能,看到了许多有意思的功能。其中可以将照片美化以及年龄调整这个功能让我想到了之前抖音的一个功能,所以特别感