tensorflow笔记(二十七)——重要tensor操作函数

2023-10-27

1.合并

多个tensor的合并主要包括2个函数:tf.concat和tf.stack,他们的输出参数都是list of tensor。区别是:

  • tf.concat是沿某一维度拼接shape相同的张量,拼接生成的新张量维度不会增加。
  • tf.stack是在新的维度上拼接,拼接后维度加1。
import tensorflow as tf
a = tf.constant([[1,2,3],[4,5,6]]) 
b = tf.constant([[7,8,9],[10,11,12]])
ab1 = tf.concat([a,b],axis=0)
ab2 = tf.stack([a,b], axis=0)
sess = tf.Session()
print(sess.run(ab1)) 
print(sess.run(ab2))
print ab1
print ab2

结果:

[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]#ab1的值

 [[[ 1  2  3]
   [ 4  5  6]]
  [[ 7  8  9]
   [10 11 12]]]#ab2的值
Tensor("concat:0", shape=(4, 3), dtype=int32)#ab1的属性
Tensor("stack:0", shape=(2, 2, 3), dtype=int32)#ab2的属性

2 拆分

将1个tensor拆分成多个tensor,主要包括2个函数:tf.split和tf.unstack。区别是:

  • tf.split(x, num_or_size_splits, axis),其中num_or_size_splits可以是数字或者list,分别表示拆分成多少份和每份长度。
  • tf.unstack(x, num, axis):希望在某个维度上全部按长度为 1 的方式分割。
a = tf.constant([[1,2,3,4,5],[6,7,8,9,10]])
b = tf.split(a, 2, axis=0)
c = tf.split(a, [1,2,2], axis=1)
d = tf.unstack(a, axis=0)
e = tf.unstack(a, axis=1)
sess=tf.Session()
print(sess.run(b))
print(sess.run(c))
print(sess.run(d))
print(sess.run(e))

结果

[array([[1, 2, 3, 4, 5]], dtype=int32), array([[ 6,  7,  8,  9, 10]], dtype=int32)] #b
[array([[1],[6]], dtype=int32), array([[2, 3], [7, 8]], dtype=int32), array([[ 4,  5],[ 9, 10]], dtype=int32)] #c
[array([1, 2, 3, 4, 5], dtype=int32), array([ 6,  7,  8,  9, 10], dtype=int32)] #d
[array([1, 6], dtype=int32), array([2, 7], dtype=int32), array([3, 8], dtype=int32), array([4, 9], dtype=int32), array([ 5, 10], dtype=int32)] #e

3.累加

常用多个tensor累加函数主要是tf.math.add, tf.math.add_n和+运算符。区别:

  • tf.math.add:两个tensor,元素相加,支持广播;
  • tf.math.add_n: list of tensors支持多个tensor,元素相加,不支持广播;
  • +元算符:与tf.math.add数学逻辑一致,只是不能加name参数。
a = tf.constant([[3, 5], [4, 8]])
b = tf.constant([[1, 6], [2, 9]])
c = tf.constant([1])
d = tf.math.add_n([a, b, a])
e = tf.math.add(a, c)
f = a + c
sess=tf.Session()
print(sess.run(d))
print(sess.run(e))
print(sess.run(f))

结果:

[[ 7 16]
 [10 25]] #d

[[4 6]
 [5 9]] #e

[[4 6]
 [5 9]] #f

4.转置

tensor的转置主要用tf.transpose函数,tf.transpose(a, perm=None, conjugate=False, name=‘transpose’),其中a是源tensor,perm是排列顺序,conjugate是bool参数用于复数共轭配置。在一些维度变换场景很有用。

import tensorflow as tf
a = tf.constant([[[1,2],[3,4]],[[5,6],[7,8]]])
b = tf.transpose(a)
c = tf.transpose(a, [0,2,1])
sess = tf.Session()
print(sess.run(a))
print(sess.run(b))
print(sess.run(c))

结果:

[[[1 2]
  [3 4]]
 [[5 6]
  [7 8]]] # a

[[[1 5]
  [3 7]]
 [[2 6]
  [4 8]]] # b
  
[[[1 3]
  [2 4]]
 [[5 7]
  [6 8]]] # c

默认perm是将源tensor的维度逆向,原始a是3维tensor,那么对应的转置b应该是将a的[0,1,2]维向量放到[2,1,0]维的位置,比如a中的7的坐标是(1, 1, 0),那么转置之后其坐标刚好颠倒是(0, 1, 1)。对于c是指定了perm参数,也就指定了转置顺序是[0, 2, 1],也就是第0维不变,第1和2维互换位置,那么a中7在c中的位置就是(1, 0, 1)。
上面可能有些抽象,在实际场景中,transpose常常用于多维tensor的调整。如下,获取特征embedding的过程:

# 一个常见的特征embedding过程
def get_features_embedding(self, features):
    multi_field_embedings = []
    for fea in features:
		# every fea is batch_size*multi_value_size
		field_embedding = tf.nn.embedding_lookup(self.embeddings, fea)
		# multi_value feature embedding mean
		field_embedding = tf.reduce_mean(field_embedding, [1])
		multi_field_embedings.append(field_embedding)
	# multi_field_size * batch_size * embedding_size
	features_embedding = tf.stack(multi_field_embedings)
	# batch_size * multi_field_size * embedding_size
	features_embedding = tf.transpose(features_embedding, (1, 0, 2))
	# batch_size * (multi_field_size * embedding_size)
	features_embedding = tf.reshape(
	    features_embedding, (-1, self.fields_size * self.embedding_size))
	return features_embedding
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tensorflow笔记(二十七)——重要tensor操作函数 的相关文章

  • “NoneType”对象不可订阅?

    list1 name1 info1 10 list2 name2 info2 30 list3 name3 info3 50 MASTERLIST list1 list2 list3 def printer lst print Availa
  • 如何在cvxpy中编写多个约束?

    我想在 cvxpy 下的优化问题中添加许多约束 在 matlab 中 我可以通过添加一行 subject to 然后使用 for 循环来生成约束 我怎样才能在 cvxpy 中做同样的工作 因为 cvxpy 中没有 服从 概念 有什么建议吗
  • 可视化时间序列时标记特定日期

    我有一个包含几年数据的时间序列 例如 ts pd Series np random randn 1000 index pd date range 1 1 2000 periods 1000 ts ts cumsum ts plot 我还有两
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • 识别 Windows 版本

    我正在编写一个打印出详细 Windows 版本信息的函数 输出可能是这样的元组 32bit XP Professional SP3 English 它将支持 Windows XP 及更高版本 我一直坚持获取 Windows 版本 例如 专业
  • 使用 asyncore 读取网站

    我想异步阅读一个网站 据我所知 这是不可能的 urllib 现在我尝试使用普通套接字进行阅读 但是 HTTP 给我带来了麻烦 我遇到了各种时髦的编码 例如传输编码 分块 必须手动解析所有这些东西 我现在想编码 C 而不是 python 难道
  • Flask-httpauth: get_password 装饰器如何为 basic-auth 工作?

    我想知道有没有人用过这个烧瓶延伸 https github com miguelgrinberg flask httpauth简化 http basic auth 基本上我不明白这个example https github com migu
  • 可重用的 Tensorflow 卷积网络

    我想重用来自Tensorflow 专业人士的 MNIST CNN 示例 http www tensorflow org tutorials mnist pros index md 我的图像尺寸为 388px X 191px 只有 2 个输出
  • 从文件中读取单词并放入列表中

    本质上 我有一个巨大的文件 所有文件包含每行多个单词 每个单词用空格分隔 有点像这样 WORD WORD WORD WORD ANOTHER WORD SCRABBLE BLAH YES NO 我想要做的是将文件中的所有单词放入一个巨大的列
  • Python、cPickle、酸洗 lambda 函数

    我必须像这样腌制一组对象 import cPickle as pickle from numpy import sin cos array tmp lambda x sin x cos x test array tmp tmp tmp tm
  • “分页文件太小,无法完成此操作”尝试训练 YOLOv5 对象检测模型时出错

    我有大约 50000 个图像和注释文件用于训练 YOLOv5 对象检测模型 我在另一台计算机上仅使用 CPU 训练模型没有问题 但需要太长时间 因此我需要 GPU 训练 我的问题是 当我尝试使用 GPU 进行训练时 我不断收到此错误 OSE
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • 没有名为 urllib.parse 的模块(我应该如何安装它?)

    我正在尝试在 CentOS 7 上运行 REST API 我读到 urllib parse is in Python 3 但我使用的是 Python 2 7 5 所以我不知道如何安装此模块 我安装了所有要求 但仍然无法运行该项目 当我寻找
  • 如何从 Selenium 获取元素的属性

    我正在 Python 中使用 Selenium 我想得到 val of a
  • 计算素数并附加到列表

    我最近开始尝试使用 python 解决 Euler 项目的问题 并且在尝试计算素数并将其附加到列表中时遇到了这个障碍 我编写了以下代码 但我很困惑为什么它在运行时不输出任何内容 import math primes def isPrime
  • Tensorflow:提要字典错误:您必须为占位符张量提供值

    我有一个错误 我无法找出原因 这是代码 with tf Graph as default global step tf Variable 0 trainable False images tf placeholder tf float32
  • 如何克服 numpy.unique 的 MemoryError

    我正在使用 Numpy 版本 1 11 1 并且必须处理一个二维数组 my arr shape 25000 25000 所有值都是整数 我需要一个唯一的数组值列表 使用时lst np unique my arr 我正进入 状态 Traceb
  • 使用 JSON 可序列化枚举自动生成棉花糖模式

    创建与我的模型相同的棉花糖模式的日子已经一去不复返了 我发现这个优秀的答案 https stackoverflow com a 42892443 4097322这解释了我如何使用简单的装饰器从 SQA 模型自动生成模式 因此我实现了它并替换
  • Python中如何实现相对导入

    考虑 stuff init py mylib py Foo init py main py foo init py script py script py想要进口mylib py 这只是一个示例 但实际上我只想在父目录中进行模块的相对导入
  • 张量流多元线性回归不收敛

    我正在尝试使用张量流训练具有正则化的多元线性回归模型 由于某种原因 我无法获取以下代码的训练部分来计算我想要用于梯度下降更新的误差 我在设置图表时做错了什么吗 def normalize data matrix averages np av

随机推荐

  • Ajax请求返回状态码415

    1 ajax请求服务器报415错误多半是ajax的请求格式不对 服务器不支持此媒体类型 那么 此时你首先小检查自己的ajax的格式是否正确 在就是传递的参数类型是否是正确的 传递给服务器的参数也要根据后台的要求设置 有时传递一个对象 但有时
  • UVA-10976 分数拆分 题解答案代码 算法竞赛入门经典第二版

    GitHub jzplp aoapc UVA Answer 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 除了书上讲的y lt 2k之外 y gt k 否则等式不可能成立 include
  • Hibernate @OneToOne FetchType.LAZY不生效

    在Hibernate中 提供了懒加载功能 当需要的时候才查询具体数据 但是在使用 OneToOne关系时 FetchType LAZY看起来不会生效 当你查询一个实体类A 这个实体类A持有另一个实体类B的引用 但是A中并没有记录B的主键 这
  • 怎样正确安装超声波水位计?

    1 应保持仪表垂直安装 在安装超声波液位计时 要保证换能器的发射面和被测的平面平行 这样可以保证垂直发射到被测物体表面的声波以最大的能量返回 2 实际安装时 如果现场工况有蒸汽 易有水珠附着在探头表面 并且探头的量程比实际要测量的距离大很多
  • Python 调用 WebService

    最近做新项目用 Python 开发 作为初学者 遇到了不少问题 客户端的一个模块要调用公司网站的一些新闻 只好用 WebService 实现 WebService 搭建我就不说了 这里主要说在 Python 调用 WebService 的方
  • BGP-路由反射器、联邦实验(1.11)

    目标 1 首先需要基于该与拓扑图对172 16 0 0 16进行子网划分 题中一共需要八个网段的环回和一个骨干链路共8个网段 172 16 0 0 20 骨干 再分为八个 172 16 0 0 30 172 16 0 4 30 172 16
  • java去重复元素并打印_Java打印数组中重复元素

    Java打印数组中重复元素 1 说明 在此程序中 我们需要打印数组中存在的重复元素 这可以通过两个循环来完成 第一个循环将选择一个元素 第二个循环将通过将所选元素与其他元素进行比较来遍历整个数组 如果找到匹配项 则打印重复的元素 在上面的数
  • 仙道服务器维护,【正式服】2月14日例行更新维护公告

    为了给您提供更优质的游戏体验 诛仙手游 正式服 将于2月14日7 00 9 00进行例行维护 如遇特殊情况 开机时间将会顺延 本次更新后 等级 30级的玩家将通过邮件收到200绑定元宝更新补偿奖励 情人节特别活动 1 执子之手 与子同秀 活
  • 【面试】面试官:src和href的区别

    1 请求资源类型不同 1 href是Hypertext Reference的缩写 表示超文本引用 用来建立当前元素和文档之问的链接 常用的有 link a 2 在请求 src 资源时会将其指向的资源下载并应用到文档中 常用的有script
  • C++STL容器(上)string/vector/deque/stack/queue/list

    数据结构 研究节点和节点之间的关系 STL 算法 容器 迭代器 实现了数据结构和算法的有效分离 用来管理元素 算法和迭代器可以进行无缝连接 count v begin v end 3 统计元素3的个数 容器除了可以放基础数据类型 也可以放元
  • 字符数组、字符串数组转换成字符串【JAVA基础】

    一 字符数组to字符串 直接声明 char c a b c String s new String c 二 字符串数组to字符串 string是不可变类 利用StringBuffer String str abc dfe hij Strin
  • l130 华大低功耗mcu_HC32L110C6PA HC32L110C6UA 华大超低功耗 Cortex-M0+ 32位MCU

    HC32L110C6PA HC32L110C4UAHC32L110C6UA 华大超低功耗 Cortex M0 32位MCU HC32L110C6PA HC32L110C4UA 华大超低功耗 Cortex M0 32位MCU 超低功耗 MCU
  • BLE基础理论/Android BLE开发示例/蓝牙扫描列表数量扫描包/扫描响应包设置等

    参考 https blog csdn net qq 36075612 article details 127739150 spm 1001 2014 3001 5502 参考 https blog csdn net qq 36075612
  • 蓝桥杯:李白打酒加强版

    话说大诗人李白 一生好饮 幸好他从不开车 一天 他提着酒壶 从家里出来 酒壶中有酒 22 斗 他边走边唱 无事街上走 提壶去打酒 逢店加一倍 遇花喝一斗 这一路上 他一共遇到店 NN 次 遇到花 MM 次 已知最后一次遇到的是花 他正好把酒
  • Java变量的分类(根据作用域)

    按照作用域的不同 变量可分为 成员变量和局部变量 成员变量有两种 静态变量和实例变量 成员变量 在类中声明 作用域是整个类 局部变量 在一个方法的内部声明 作用域是整个方法 静态变量 被static关键字修饰 在内存中只有一个 被类的所有实
  • Jenkins配置定时任务

    1 点击任务后 点击配置 2 选择 构建触发器 下面的 定时构建 并设定定时规则 设置完成后 构建任务就会按照我们设置的时间定时执行了 3 设定规则 此处定时任务的格式遵循 cron 的语法 可以与 cron 的语法有轻微的差异 具体格式
  • App版本更新接口的设计

    工作这几年碰到的版本检测升级的接口也算是五花八门 啥样的都有 但肯定有的功能是有个apk的下载链接 能间接或直接提示你是强制还是非强制更新 间接是指提供你后台最新版本号 让你自己与本地版本号通过比较得出是否升级 直接就是后台接口直接返回个B
  • redhat6.9安装docker

    1 离线安装说明 内网环境需要在redhat6 9上安装docker以及docker compose 内网不能连接互联网 所以只能采用手工下载离线安装包的方式做 2 需要操作系统版本 docker支持的版本有 redhat7 redhat6
  • java类的加载顺序

    一 程序 package yy class Parent static int a 4 static System out println Parent class Chlid extends Parent static int a 5 s
  • tensorflow笔记(二十七)——重要tensor操作函数

    1 合并 多个tensor的合并主要包括2个函数 tf concat和tf stack 他们的输出参数都是list of tensor 区别是 tf concat是沿某一维度拼接shape相同的张量 拼接生成的新张量维度不会增加 tf st