Tensorflow2.0之根据索引号收集数据

tensorflow2.0 张量操作 3 张量操作 3.1 索引 Tensorflow中,支持基本的[i][j]…的标准索引方式,也支持通过逗号分隔索引号的索引方式[i, j, k]。假设如下为图片数据 In [3]: x = tf.random.normal([4, 32, 32, 3]) 取第一张图片数据 In [4]: x[0] ... 阅读详情

Tensorflow之根据索引号收集数据

tf.gather

tf.gather 可以实现根据索引号收集数据的目的。考虑班级成绩册的例子,共有4个班,每个班35个学生,8门学科,保存成绩册的张量shape为[4,35,8]。

x = tf.random.uniform([4,35,8],maxval=100,dtype=tf.int32)

现在需要收集1-2班的成绩册,可以给定班级索引号:[0,1]/[:2],班级的维度为axis=0:

In [38]:tf.gather(x,[0,1],axis=0) # 在班级维度收集第1-2 号班级成绩册
Out[38]:<tf.Tensor: id=83, shape=(2, 35, 8), dtype=int32, numpy=
array([[[43, 10, 93, 85, 75, 87, 28, 19],
[52, 17, 44, 88, 82, 54, 16, 65],
[98, 26, 1, 47, 59, 3, 59, 70],…

实际上,对于上述需求,通过切片𝑥[: 2]可以更加方便地实现。但是对于不规则的索引方式,比如,需要抽查所有班级的第1,4,9,12,13,27 号同学的成绩,则切片方式实现起来非常麻烦,而tf.gather 则是针对于此需求设计的,使用起来非常方便:

In [39]: # 收集第1,4,9,12,13,27 号同学成绩
tf.gather(x,[0,3,8,11,12,26],axis=1)
Out[39]:<tf.Tensor: id=87, shape=(4, 6, 8), dtype=int32, numpy=
array([[[43, 10, 93, 85, 75, 87, 28, 19],
[74, 11, 25, 64, 84, 89, 79, 85],…

如果需要收集所有同学的第3,5 等科目的成绩,则可以:

In [40]:tf.gather(x,[2,4],axis=2) # 第3,5 科目的成绩
Out[40]:<tf.Tensor: id=91, shape=(4, 35, 2), dtype=int32, numpy=
array([[[93, 75],
[44, 82],[ 1, 59],…

可以看到,tf.gather 非常适合索引没有规则的场合,其中索引号可以乱序排列,此时收集的数据也是对应顺序:

In [41]:a=tf.range(8)
a=tf.reshape(a,[4,2]) # 生成张量a
Out[41]:<tf.Tensor: id=115, shape=(4, 2), dtype=int32, numpy=
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])>
In [42]:tf.gather(a,[3,1,0,2],axis=0) # 收集第4,2,1,3 号元素
Out[42]:<tf.Tensor: id=119, shape=(4, 2), dtype=int32, numpy=
array([[6, 7],
[2, 3],
[0, 1],
[4, 5]])>

我们将问题变得复杂一点:如果希望抽查第[2,3]班级的第[3,4,6,27]号同学的科目成绩,则可以通过组合多个tf.gather 实现。首先抽出第[2,3]班级:

In [43]:students=tf.gather(x,[1,2],axis=0) # 收集第2,3 号班级
Out[43]:<tf.Tensor: id=227, shape=(2, 35, 8), dtype=int32, numpy=
array([[[ 0, 62, 99, 7, 66, 56, 95, 98],…

再从这2 个班级的同学中提取对应学生成绩:

In [44]:tf.gather(students,[2,3,5,26],axis=1) # 收集第3,4,6,27 号同学
Out[44]:<tf.Tensor: id=231, shape=(2, 4, 8), dtype=int32, numpy=
array([[[69, 67, 93, 2, 31, 5, 66, 65], …

此时得到这2 个班级4 个同学的成绩,shape 为[2,4,8]。

我们再将问题进一步复杂:这次我们希望抽查第2 个班级的第2 个同学的所有科目,
第3 个班级的第3 个同学的所有科目,第4 个班级的第4 个同学的所有科目。那么怎么实现呢?

可以通过笨方式一个一个的手动提取:首先提取第一个采样点的数据:𝑥[1,1],可得到
8 门科目的数据向量:

In [45]: x[1,1] # 收集第2 个班级的第2 个同学
Out[45]:<tf.Tensor: id=236, shape=(8,), dtype=int32, numpy=array([45, 34,
99, 17, 3, 1, 43, 86])>

再串行提取第二个采样点的数据:𝑥[2,2],和第三个采样点的数据𝑥[3,3],最后通过stack方式合并采样结果:

In [46]: tf.stack([x[1,1],x[2,2],x[3,3]],axis=0)
Out[46]:<tf.Tensor: id=250, shape=(3, 8), dtype=int32, numpy=
array([[45, 34, 99, 17, 3, 1, 43, 86],
[11, 25, 84, 95, 97, 95, 69, 69],
[ 0, 89, 52, 29, 76, 7, 2, 98]])>

这种方法也能正确的得到shape 为[3,8]的结果,其中3 表示采样点的个数,4 表示每个采样点的数据。但是它最大的问题在于手动串行方式执行采样,计算效率极低。有没有更好的方式实现呢?这就是下面要介绍的tf.gather_nd 的功能。

tf.gather_nd

通过 tf.gather_nd,可以通过指定每次采样的坐标来实现采样多个点的目的。回到上面的挑战,我们希望抽查第2 个班级的第2 个同学的所有科目,第3 个班级的第3 个同学的所有科目,第4 个班级的第4 个同学的所有科目。那么这3 个采样点的索引坐标可以记为:[1,1], [2,2], [3,3],我们将这个采样方案合并为一个List 参数:[[1,1], [2,2], [3,3]],通过tf.gather_nd 实现如下:

In [47]: # 根据多维度坐标收集数据
tf.gather_nd(x,[[1,1],[2,2],[3,3]])
Out[47]:<tf.Tensor: id=256, shape=(3, 8), dtype=int32, numpy=
array([[45, 34, 99, 17, 3, 1, 43, 86],
[11, 25, 84, 95, 97, 95, 69, 69],
[ 0, 89, 52, 29, 76, 7, 2, 98]])>

可以看到,结果与串行采样完全一致,实现更加简洁,计算效率大大提升。一般地,在使用tf.gather_nd 采样多个样本时,如果希望采样第i 号班级,第j 个学生,第k 门科目的成绩,则可以表达为[. . . , [𝑖, 𝑗, 𝑘], . . . ],外层的括号长度为采样样本的个数,内层列表包含了每个采样点的索引坐标:

In [48]: # 根据多维度坐标收集数据
tf.gather_nd(x,[[1,1,2],[2,2,3],[3,3,4]])
Out[48]:<tf.Tensor: id=259, shape=(3,), dtype=int32, numpy=array([99, 95,
76])>

上述代码中,我们抽出了班级1,学生1 的科目2;班级2,学生2 的科目3;班级3,学生3 的科目4 的成绩,共有3 个成绩数据,结果汇总为一个shape 为[3]的张量。

Mac上MySQL出现secure-file-priv为null 在使用MySQL导入导出文件时出现了错误,原因是没有配置secure-file-priv。 我的MySQL版本是8.0.13,使用如下命令查看secure-file-priv。 结果发现secure-file-priv为空,此时需要为它配置一个文件夹。 解决方案: 1)到MySQL的安装目录中去,Mac中是的是 /usr/local/mysql/support-files,该目录下有一... 阅读详情

相关推荐

本地部署Llama 3中文版:Ollama量化配置与调优指南

大模型本地部署正在成为数据敏感场景下的主流选择。本地运行开源大模型,既能保护隐私又能降低调用成本,但中文能力往往成为瓶颈。以Llama 3为代表的开源模型,需借助中文微调与量化技术,才能在消费级显卡上流畅运行。量化通过压缩模型权重减小显存占用,配合Ollama等推理框架,可快速搭建私有中文AI服务。该方案适用于知识库问答、内容生成、离线助手等场景,并可通过OpenAI兼容接口无缝对接Dify等应用平台。本文从硬件选型、量化等级到Modelfile配置,系统梳理本地部署中文大模型的全链路实战方法与排错思路,帮

weixin_29035405的博客 83

tensorflow分类损失函数梳理

tf.nn.sparse_softmax_cross_entropy_with_logits tf.nn.sparse_softmax_cross_entropy_with_logits( logits, # shape [batch_size, num_classes] labels, # shape [batch_size] name=None ) 计算logits 和 labels 之间的稀疏softmax 交叉熵 度量在离散分类任务中的错误率 1)labels的条件是互斥的,也就是说,一个样本只

AnneQiQi的博客 770

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6635

Tensorflow快餐教程(3) - 向量

向量 向量在编程语言中就是最常用的一维数组。二维数组叫做矩阵,三维以上叫做张量。 向量虽然简单,高效,且容易理解。但是与操作0维的标量数据毕竟还是不同的。比如向量经常用于表示一个序列,生成序列像标量一样一个一个手工写就不划算了。当然可以用循环来写。在向量中这样还好,如果是在矩阵或者是张量中就强烈建议不要用循环来做了。系统提供的函数一般都是经过高度优化的,...

weixin_34270865的博客 347

基于Python的电商平台商品信息爬取与价格监控系统设计与实现

本文详细介绍了一个基于Python的电商平台商品信息爬取与价格监控系统的设计与实现。系统采用最新的Python爬虫技术栈,包括Scrapy框架、Selenium自动化测试工具、BeautifulSoup解析库等,实现了对主流电商平台商品信息的自动化采集、存储、分析和可视化展示。文章从系统架构设计、关键技术实现、核心代码解析等方面进行了全面阐述,并提供了完整的代码实现。该系统不仅适用于毕业设计,也可作为商业价格监控系统的原型。关键词:Python爬虫;电商数据采集;价格监控;Scrapy;Selenium;

2201_76125261的博客 964

第81篇:Vibe Coding时代:LangGraph + Eval评估体系实战,解决 Agent 优化全靠感觉的问题

本文介绍了一个为LangGraph Coding Agent设计的评估体系解决方案。文章首先指出了当前AI Coding Agent开发中的常见问题:优化过程缺乏客观评估标准,导致改进效果难以量化。随后提出了一个完整的评估框架,包括评估指标(任务成功率、质量指标、安全指标、成本指标和流程指标)、项目结构设计和评估案例集。 核心内容包括: 设计了JSON格式的评估案例集,覆盖正常任务、边界任务和高风险场景 实现了模拟Agent输出的演示代码 构建了多维度评分系统,包括关键词匹配、禁用词检测和成本评估 提供了评

sundong_81的博客 48

Tensorflow—词向量

一、Tensorflow构建流程 1.1 Tensorflow的基本总结 1.2 Tensorflow构建流程运行—保存模型—加载模型 二、语言模型和词向量 1 随着模型不断更新 1.1 train文件中输入语句用index表示 1.2 模型文件中index向量转化为词向量 2 直接使用预先训练好的词向量如word2vec, glove 2.1 train文件中 2.2 m...

红叶谷 wsp_1138886114的博客 1220

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

本文描述串口DMA收/发机制设计,及STM32串口DMA收/发实现。

只要思想不滑坡,想法总比问题多。 5万+

Tensorflow向量维度

生成变量维度 a1=tf.zeros([]) a2=tf.zeros([2]) a3=tf.zeros([2,6]) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) r1,r2,r3=sess.run([a1,a2,a3]) print(r1) print(r2) print(r3) # 0.0 # [0. 0.] # [[0. 0. 0. 0. 0. 0.] # [0. 0. 0.

公众号:瑞行AI 791

【AI Agent 记忆共享实战】【下篇】多 Agent 会话 Session 统一共享实战:全链路工程落地、采集归一、MCP 服务、私有化部署、源码级实战

中篇我们已经锁定最终最优架构方案: 非侵入式、外部旁路采集、只读归一、中心化存储、MCP 按需检索注入。摒弃「改 Agent 源码」「软链接互通」「原生 Session 互导」等不现实方案。本篇直接落地可上线、可简历复用、可个人私有化部署多 Agent 异构 Session专属采集器(Claude/CODex/DSH/OpenCode/Kimi/WorkBuddy/ 豆包)统一消息归一化解析层(解决所有 Schema 异构)增量同步、去重、时间戳对齐核心逻辑。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 484

yolov8 转华为昇腾om脚本

yolov8 转华为昇腾om脚本

jacke121的专栏 1602

tensorflow 利用索引获取tensor特定元素

上代码,利用tf.gather_nd函数: eg1: 常数索引 import tensorflow as tf sess=tf.Session() a=tf.constant([[0,1,2],[3,4,5]])#shape:(2,3) result=tf.gather_nd(a,[0,1])#1 sess.run(result) eg2:变量索引 import tensorflow as tf sess=tf.Session() a=tf.constant([[0,1,2],[3,4,5]])

君莫笑 4885

Python爬虫实战:基于Scrapy与Playwright的搜狐新闻高效爬取

在当今信息爆炸的时代,网络爬虫技术已成为数据获取和分析的重要工具。作为国内领先的新闻门户网站,搜狐新闻包含了大量有价值的新闻数据,这些数据对于舆情分析、市场研究等领域具有重要意义。本文将详细介绍如何使用Python最新的爬虫技术栈(Scrapy框架结合Playwright浏览器自动化工具)来高效爬取搜狐新闻数据。pythontitle = scrapy.Field() # 新闻标题url = scrapy.Field() # 新闻链接。

2201_76125261的博客 1553

TF2.1进阶-tf.gather()

import tensorflow as tf from tensorflow import keras import numpy as np import matplotlib.pyplot as plt print(tf.__version__) 2.1.0 tf.gather()函数 可以实现根据索引号进行数据收集 # 4 35 8 4个班级,每个班有35名学生,每名学生有8个科目要上 x = tf.random.uniform([4,35,8],maxval = 100,dtype=tf.in

jiayoudangdang的博客 1203

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Tensorflow2.0建立神经网络

1.TensorFlow基础知识 1.1 变量和常量的定义和运用 state = tf.Variable() 定义变量的代码如下: import tensorflow as tf state = tf.Variable(0, name='counter') # 定义常量 one one = tf.constant(1) # 定义加法步骤 (注: 此步并没有直接计算) new_value = tf.add(state, one) # 将 State 更新成 new_value update = tf.c

qq_40497403的博客 862

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TensorFlow2.0 进阶

拼接:通过 tf.concat(tensors, axis),其中 tensors 保存了所有需要合并的张量 List,axis 指定需要合并的维度 堆叠: tf.concat() 直接在现有维度上面合并数据,并不会创造新的维度 若希望创建一个新的维度,则需要使用 tf.stack( ) 操作。但tf.stack( )需要所有的合并张量完全一致;使用 tf.stack(tensors, axis)...

qq_41168327的博客 362

Tensorflow2.0四维张量的索引和切片问题

文章目录索引❑ 取第 1 张图片的数据:❑ 取第 1 张图片的第2 行:❑ 取第 1 张图片,第2 行,第3 列的像素:❑ 取第 3 张图片,第2 行,第1 列的像素,B 通道(第2 个通道)颜色强度值:❑ 取第 2 张图片,第10 行,第3 列:切片❑ 读取第 2,3 张图片:❑ 读取第 1-2 张图片的G/B 通道数据:❑ 读取最后2 张图片:❑ 读取 R/G 通道数据: 索引 在 Tenso...

python_LC_nohtyp的博客 2819

Tensorflow2.0学习笔记(2):常用函数

Tensorflow2.0学习笔记(1):常用函数 tf.cast(张量名,dtype=数据类型) 转换数据类型 a=tf.constant([1,2,3,4,5]) print(a) print(tf.cast(a,tf.float32)) tf.reduce_min(张量名) 找最小值 print(tf.reduce_min(a)) print(tf.reduce_max(a)) tf.reduce_max(张量名) 找最大值 print(tf.reduce_min(a)) print(t

qq_44949310的博客 331

三、tensorflow进阶

(一) 合并与分割 合并 # 1.拼接 tf.concat(tensors,axis),拼接并不创建新的维度 # 注意地方是非拼接维度必须一致 a = tf.random.normal([4,32,32,3]) b = tf.random.normal([2,32,32,3]) c = tf.concat([a,b],axis=0) # 2.堆叠 tf.stack(tensors,axis),可以增减新的维度 a = tf.random.normal([2,2]) b = tf.random.norma

user_lib的博客 176

TensorFlow2.0中Tensor的合并与拆分

合并 将多个张量在某个维度上合并为一个张量,可以使用拼接和堆叠操作实现,拼接操作并不会产生新的维度,仅在现有的维度上合并,而堆叠会创建新维度。 拼接: tf.concat(tensors, axis) tensors:保存了所有需要合并的张量 List axis:指定需要合并的维度索引 合并时输入张量的维数必须匹配,并且除 axis 外的所有维数必须相等 举个例子: >>> im...

Steven的博客 6823

TensorFlow 2.0深度学习算法实战 第五章 Tensorflow进阶

第一章 人工智能绪论 1.1 人工智能 信息技术是人类历史上的第三次工业革命,计算机、互联网、智能家居等技术的普及 极大地方便了人们的日常生活。通过编程的方式,人类可以将提前设计好的交互逻辑重复 且快速地执行,从而将人类从简单枯燥的重复劳动任务中解脱出来。但是对于需要较高智 能的任务,如人脸识别,聊天机器人,自动驾驶等任务,很难设计明确的逻辑规则,传统 的编程方式显得力不从心,而人工智能技术是有望...

猫敷雪 4469

TensorFlow:高级操作

文章目录一、tf.gather二、tf.gather_nd三、tf.where四、scatter_nd五、meshgrid 一、tf.gather tf.gather 可以实现根据索引号收集数据的目的。 考虑班级成绩册的例子,共有4 个班级,每个班级35 个学生,8 门科目,保存成绩册的张量shape 为[4,35,8]。 x = tf.random.uniform([4,35,8],maxval...

南淮北安的博客 1355

tensorflow 2.0 深度学习(第一部分 part3)

tensorflow 2.0 深度学习(第一部分 part1) tensorflow 2.0 深度学习(第一部分 part2) tensorflow 2.0 深度学习(第一部分 part3) tensorflow 2.0 深度学习(第二部分 part1) tensorflow 2.0 深度学习(第二部分 part2) tensorflow 2.0 深度学习(第二部分 part3) te...

あずにゃん梓喵的博客 1004

TensorFlow2.0深度学习(五)TensorFlow进阶

如下图所示,演示了一维张量白板的刷新运算,白板的形状表示为shape参数,需要刷新的数据索引为indices,新数据为updates,其中每个需要刷新的数据对应在白板中的位置,根据indices给出的索引位置将updates中新的数据依次写入白板中,但返回更新后的白板张量。合并这2个班级的数据时,需要创建一个新维度,定义为班级维度,新维度可以选择放置在任意位置,一般根据大小维度的经验法则,将较大概念的班级维度放置在学生维度之前,则合并后的张量的新shape应为[2,35,8]。这就是张量合并的意义所在。

weixin_50911531的博客 284

Tensorflow2.0之合并与分割

文章目录Tensorflow之合并与分割合并拼接堆叠分割 Tensorflow之合并与分割 合并 合并是指将多个张量在某个维度上合并为一个张量。以某学校班级成绩册数据为例,设张量A 保存了某学校1-4 号班级的成绩册,每个班级35 个学生,共8 门科目,则张量A的shape 为:[4,35,8];同样的方式,张量B 保存了剩下的6 个班级的成绩册,shape 为[6,35,8]。通过合并2 个成绩...

python_LC_nohtyp的博客 608

Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总

Tensorflow2 与 Pytorch 在张量Tensor基础操作方面的对比整理汇总

takedachia的博客 858
上一篇: Tensorflow2.0之合并与分割
下一篇: Tensorflow2.0之经典数据集加载
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值