Tensorflow2.0之合并与分割

复合材料热压罐固化残余应力仿真与优化 复合材料在热压罐固化过程中产生的残余应力是影响构件性能的关键因素,尤其在航空航天和风电叶片等高端制造领域。通过多物理场耦合仿真技术,可以精确预测残余应力分布,优化工艺参数。顺序耦合方法分步求解热分析和结构分析,既保证了计算精度,又控制了成本。Abaqus等有限元工具在此过程中发挥重要作用,通过合理设置边界条件、材料属性和接触关系,能够有效模拟温度场和应力场的相互作用。工程实践中,这种仿真方法已成功应用于无人机机翼、卫星支架等实际项目,显著降低了固化变形和微裂纹风险。 阅读详情

Tensorflow之合并与分割

合并

合并是指将多个张量在某个维度上合并为一个张量。以某学校班级成绩册数据为例,设张量A 保存了某学校1-4 号班级的成绩册,每个班级35 个学生,共8 门科目,则张量A的shape 为:[4,35,8];同样的方式,张量B 保存了剩下的6 个班级的成绩册,shape 为[6,35,8]。通过合并2 个成绩册,便可得到学校所有班级的成绩册张量C,shape 应为[10,35,8]。这就是张量合并的意义所在。张量的合并可以使用拼接(Concatenate)和堆叠(Stack)操作实现,拼接并不会产生新的维度,而堆叠会创建新维度。选择使用拼接还是堆叠操作来合并张量,取决于具体的场景是否需要创建新维度

拼接

在TensorFlow 中,可以通过tf.concat(tensors, axis),其中tensors 保存了所有需要合并的张量List,axis 指定需要合并的维度。回到上面的例子,这里班级维度索引号为0,即axis=0,合并张量A,B 如下:

In [1]:
a = tf.random.normal([4,35,8]) # 模拟成绩册A
b = tf.random.normal([6,35,8]) # 模拟成绩册B
tf.concat([a,b],axis=0) # 合并成绩册
Out[1]:
<tf.Tensor: id=13, shape=(10, 35, 8), dtype=float32, numpy=
array([[[ 1.95299834e-01, 6.87859178e-01, -5.80048323e-01, ...,
1.29430830e+00, 2.56610274e-01, -1.27798581e+00],
[ 4.29753691e-01, 9.11329567e-01, -4.47975427e-01, ...,

除了可以在班级维度上进行合并,还可以在其他维度上合并张量。考虑张量A 保存了所有班级所有学生的前4 门科目成绩,shape 为[10,35,4],张量B 保存了剩下的4 门科目成绩,shape 为[10,35,4],则可以合并shape 为[10,35,8]的总成绩册张量:

In [2]:
a = tf.random.normal([10,35,4])
b = tf.random.normal([10,35,4])
tf.concat([a,b],axis=2) # 在科目维度拼接
Out[2]:
<tf.Tensor: id=28, shape=(10, 35, 8), dtype=float32, numpy=array([[[-5.13509691e-01, -1.79707789e+00, 6.50747120e-01, ...,
2.58447856e-01, 8.47878829e-02, 4.13468748e-01],
[-1.17108583e+00, 1.93961406e+00, 1.27830813e-02, ...,

合并操作可以在任意的维度上进行,唯一的约束是非合并维度的长度必须一致。比如shape为[4,32,8]和shape 为[6,35,8]的张量则不能直接在班级维度上进行合并,因为学生数维度的长度并不一致,一个为32,另一个为35:

In [3]:
a = tf.random.normal([4,32,8])
b = tf.random.normal([6,35,8])
tf.concat([a,b],axis=0) # 非法拼接
Out[3]:
InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0]
= [4,32,8] vs. shape[1] = [6,35,8] [Op:ConcatV2] name: concat

堆叠

堆叠 tf.concat 直接在现有维度上面合并数据,并不会创建新的维度。如果在合并数据时,希望创建一个新的维度,则需要使用tf.stack 操作。考虑张量A 保存了某个班级的成绩册,shape 为[35,8],张量B 保存了另一个班级的成绩册,shape 为[35,8]。合并这2 个班级的数据时,需要创建一个新维度,定义为班级维度,新维度可以选择放置在任意位置,一般根据大小维度的经验法则,将较大概念的班级维度放置在学生维度之前,则合并后的张量的新shape 应为[2,35,8]。

使用 tf.stack(tensors, axis)可以合并多个张量tensors,其中axis 指定插入新维度的位置,axis 的用法与tf.expand_dims 的一致,当axis ≥ 0时,在axis 之前插入;当axis < 0时,在axis 之后插入新维度。例如shape 为[𝑏, 𝑐, ℎ, 𝑤]的张量,在不同位置通过stack 操作插入新维度,axis 参数对应的插入位置设置如图所示:

在这里插入图片描述
堆叠方式合并这2 个班级成绩册如下:

In [4]:
a = tf.random.normal([35,8])
b = tf.random.normal([35,8])
tf.stack([a,b],axis=0) # 堆叠合并为2 个班级
Out[4]:
<tf.Tensor: id=55, shape=(2, 35, 8), dtype=float32, numpy=
array([[[ 3.68728966e-01, -8.54765773e-01, -4.77824420e-01,
-3.83714020e-01, -1.73216307e+00, 2.03872994e-02,
2.63810277e+00, -1.12998331e+00],…

同样可以选择在其他位置插入新维度,如在最末尾插入:

In [5]:
a = tf.random.normal([35,8])
b = tf.random.normal([35,8])
tf.stack([a,b],axis=-1) # 在末尾插入班级维度
Out[5]:
<tf.Tensor: id=69, shape=(35, 8, 2), dtype=float32, numpy=
array([[[ 0.3456724 , -1.7037214 ],
[ 0.41140947, -1.1554345 ],
[ 1.8998919 , 0.56994915],…

此时班级的维度在axis=2 轴上面,理解时也需要按着最新的维度顺序去理解数据。若选择使用tf.concat 上述成绩单,则可以合并为:

In [6]:
a = tf.random.normal([35,8])
b = tf.random.normal([35,8])
tf.concat([a,b],axis=0) # 拼接方式合并,没有2 个班级的概念
Out[6]:
<tf.Tensor: id=108, shape=(70, 8), dtype=float32, numpy=
array([[-0.5516891 , -1.5031327 , -0.35369992, 0.31304857, 0.13965549,
0.6696881 , -0.50115544, 0.15550546],
[ 0.8622069 , 1.0188094 , 0.18977325, 0.6353301 , 0.05809061,…

tf.concat 也可以顺利合并数据,但是在理解时,需要按着前35 个学生来自第一个班级,后35 个学生来自第二个班级的方式。在这里,明显通过tf.stack 方式创建新维度的方式更合理,得到的shape 为[2,35,8]的张量也更容易理解。

tf.stack 也需要满足张量堆叠合并条件,它需要所有合并的张量shape 完全一致才可合并。我们来看张量shape 不一致时进行堆叠合并会发生的错误:

In [7]:
a = tf.random.normal([35,4])
b = tf.random.normal([35,8])
tf.stack([a,b],axis=-1) # 非法堆叠操作
Out[7]:InvalidArgumentError: Shapes of all inputs must match: values[0].shape       [35,4] != values[1].shape = [35,8] [Op:Pack] name: stack

上述操作尝试合并shape 为[35,4]和[35,8]的2 个张量,由于2 者形状不一致,无法完成合并操作。

分割

合并操作的逆过程就是分割,将一个张量分拆为多个张量。继续考虑成绩册的例子,我们得到整个学校的成绩册张量,shape 为[10,35,8],现在需要将数据在班级维度切割为10 个张量,每个张量保存了对应班级的成绩册。

通过 tf.split(x, axis, num_or_size_splits)可以完成张量的分割操作,其中
❑ x:待分割张量
❑ axis:分割的维度索引号
❑ num_or_size_splits:切割方案。当num_or_size_splits 为单个数值时,如10,表示切割
为10 份;当num_or_size_splits 为List 时,每个元素表示每份的长度,如[2,4,2,2]表示切割为4 份,每份的长度分别为2,4,2,2现在我们将总成绩册张量切割为10 份:

In [8]:
x = tf.random.normal([10,35,8])
# 等长切割
result = tf.split(x,axis=0,num_or_size_splits=10)
len(result)
Out[8]: 10

可以查看切割后的某个张量的形状,它应是某个班级的所有成绩册数据,shape 为[35,8]之类:

In [9]: result[0]
Out[9]: <tf.Tensor: id=136, shape=(1, 35, 8), dtype=float32, numpy=
array([[[-1.7786729 , 0.2970506 , 0.02983334, 1.3970423 ,
1.315918 , -0.79110134, -0.8501629 , -1.5549672 ],
[ 0.5398711 , 0.21478991, -0.08685189, 0.7730989 ,…

可以看到,切割后的班级shape 为[1,35,8],保留了班级维度,这一点需要注意。我们进行不等长的切割:将数据切割为4 份,每份长度分别为[4,2,2,2]:

In [10]: x = tf.random.normal([10,35,8])
# 自定义长度的切割
result = tf.split(x,axis=0,num_or_size_splits=[4,2,2,2])
len(result)
Out[10]: 4

查看第一个张量的shape,根据我们的切割方案,它应该包含了4 个班级的成绩册:

In [10]: result[0]
Out[10]: <tf.Tensor: id=155, shape=(4, 35, 8), dtype=float32, numpy=
array([[[-6.95693314e-01, 3.01393479e-01, 1.33964568e-01, ...,

查看切割后的张量的形状:

In [12]: result[0]
Out[12]: <tf.Tensor: id=166, shape=(35, 8), dtype=float32, numpy=
array([[-0.2034383 , 1.1851563 , 0.25327438, -0.10160723, 2.094969 ,
-0.8571669 , -0.48985648, 0.55798006],…

可以看到,通过tf.unstack 切割后,shape 变为[35,8],即班级维度消失了,这也是与tf.split区别之处。

SPME/IP PPT详解 什么是中间件?它是操作系统与应用程序之间的一块代码,它对于应用程序提供了一些标准接口,屏蔽了应用程序与底层的一些交互,上层应用程序只要和中间件进行交互就可以了,这样就可以达到一个解耦的目的。SOMEIP其实是一个中间件,它是操作系统与应用程序之间的一段代码,它是可以运行在TCP/IP之上的,可以在很多平台上使用,可以适配较多的操作系统,可以提供很多接口。经过序列化之后,在网络上传输的是一些101010这样的二进制流。SOME/IP可以承接应用层的一些数据,进行打包放到传输层。 阅读详情

相关推荐

自动驾驶——最优控制算法(LQR)工程化总结

到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”的阶段、再到对着一堆网上的资料和公式一筹莫展不知何着手、再到初步实现了LQR算法的开发(但是使用的扭矩环控制,控制的不好,而且由于各种原因被delay,迟迟无法落地),直到大上个星期,泊车平台有此LQR开发需求,又重新了开始了算法的研发,用时一个周时间完成了算法开发,然后再用一个周时间进行实车最优控制算法验证与调试,取得了很大的进展,由于执行器是转角控制的,这无疑少了很多的工作量。

qq_40464599的博客 2787

tensorflow1.0.0 弃用了几个operator写法

除法和取模运算符(/, //, %)现已匹配 Python(flooring)语义。这也适用于 tf.div 和 tf.mod。为了获取强制的基于整数截断的行为,你可以使用 tf.truncatediv 和 tf.truncatemod. tf.divide 现在是推荐的除法函数。tf.div 还将保留,但其语义将不会响应 Python 3 或 from future 机制 . tf.revers...

博客园搬家测试账号 620

本地如何安装midscene.js运行环境

手把手教你本地安装midscene.js运行环境

实践助梦想成长 2610

学习TensorFlow,concat连接两个(或多个)通道

深度学习中,我们经常要使用的技术之一,连接连个通道作为下一个网络层的输入,那么在tensorflow怎么来实现呢?

何雷 5万+

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1905

从JT808/JT1078协议到多端协同:构建高并发北斗车辆监控平台的技术实践

本文详细介绍了基于JT808/JT1078协议构建高并发北斗车辆监控平台的技术实践,包括协议解析、高并发架构设计、多端协同实现及数据持久化策略。通过Netty、Kafka等技术优化,系统成功支撑日均2000万条消息处理,为GPS车辆动态监控系统提供了可靠解决方案。

weixin_28358083的博客 224

Tensors in list passed to ‘values‘ of ‘ConcatV2‘ Op have types [bool, float32] that don‘t all match.

在建立NER识别模型 BiLSTM-CRF时出现: TypeError: Tensors in list passed to 'values' of 'ConcatV2' Op have types [bool, float32] that don't all match.

chenhepg的博客 549

深入理解搜索引擎——搜索评价指标

    搜索引擎,在做好query理解、索引召回以及排序模型之后,就能直接推上线了吗?答案是否定的,还需对其性能和质量进行评测。性能无非是对时间和空间的运行效率作评测,不细讲,今天讲讲搜索引擎的质量评测。通过质量评测,可根据评测结果不断的进行改进和研究,也可以验证搜索引擎在真实环境中运行时的实际效果。因此,搜索引擎的质量评测对于整个系统的研制和发展是至关重要的。     那么有哪些指标可以评估搜索引擎的结果质量呢?最广为人知的

我是药老的博客 4485

【TensorFlow基础函数】tf.concat的用法

tf.concat 的用法 TF官方的文档 tf.concat( values, axis, name='concat' ) 连接多个Tensor的操作 values 多个Tensor axis是哪个纬度 0 代表第一纬度 1 代表第二纬度 2 代表第三纬度 n 代表第n+1纬度 案例: t1 = [[[1, 2, 3], [4, 5, 6]],[[7, 8, 9...

沧海一粟 2692

Vue - 解决 Property or method “__v_isRef“ is not defined on the instance but referenced(浏览器控制台报错,代码没错)

vue,vue2控制台报错,vue报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue代码没问题,但是报错Propertyormethod"__v_isRef"isnotdefinedontheinstancebutreferenced,vue2如何解决报错,vue怎么解决报错问题,vue2Propertyormethod"__v_isRef"isnotdefi

🏆 前端领域优质创作者 4503

SAP自动化-ME51N批量创建采购申请

2、需要管理员授权RZ11脚本录制回放功能。1、仅限于正对SAP日常工作的批量处理。3、数据模板按实际需求更新。物料编码,工厂,数量。

小九啥也不会 530

TensorFlow版本带来的concat错误

TypeError: Expected int32, got list containing Tensors of type ‘_Message’ instead.

Minecraft 4052

华为MetaERP Oracle EBS OM(订单管理)模块详解作为ERP财务解决方案架构师,理解OM模块的业务全景和数据模型至关重要。OM是EBS分销链路的核心引擎,贯穿“订单到收款“(Orde

Oracle EBS OM模块是管理销售订单全生命周期的核心模块,涵盖客户管理、订单执行、发运开票、定价及信用控制等功能。其标准流程包括订单录入、预订、发放、发运确认和自动开票等环节,核心数据表涉及订单、客户、发运和定价等业务对象。OM模块与库存、应收、发运等模块深度集成,架构师需重点设计订单类型、信用控制策略和自动开票接口等关键环节,确保业务流程高效流转。

金牌架构师 361

TensorFlow2.0:张量的合并与分割

** 一 tf.concat( ) 函数–合并 ** In [2]: a = tf.ones([4,35,8]) In [3]: b = tf.ones([2,35,8]) In [4]: c...

meijie2018_1的博客 2739

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

tensorflow 2.0下张量的合并与分割

tf.concat([tensor1, tensor2, tensor3,…], axis)用来拼接张量的函数 tf.concat()拼接的张量只会改变一个维度,其他维度是保存不变的。比如两个shape为[2,3]的矩阵拼接,要么通过axis=0变成[4,3],要么通过axis=1变成[2,6]。改变的维度索引对应axis的值。这样就可以理解多维矩阵的拼接了,可以用axis的设置来从不同维度进行拼...

Galaxy_Taurus的博客 1047

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

TensorFlow2.0——5、合并与分割

tf.concat tf.split tf.stack tf.unstack 注意(axis=?) tf.concat 合并操作 除了axis可以不同,其他必须相同 In [3]: a=tf. ones([4,35,8]) In [4]: b=tf.ones([2,35,8]) In [6]: c=tf.concat([a,b],axis=0) In [7]: C. shape Out[7...

lzw964684894的博客 357

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

tensorflow 2.0 高阶操作 之 tensor合并与分割

4.1 tensor高阶操作ConcatStackUnstackSplit Concat Statistics about score [class1-4, students, scores] [class5-6, students, score a = tf.ones([4, 35, 8]) b = tf.ones([2, 35, 8]) c = tf.concat([a, b], axi...

记录求学阶段的技术学习、项目实践与成长思考。 3197

【TensorFlow2.0】(5) 数学计算、合并、分割

各位同学好,今天和大家分享一下TensorFlow2.0中的数学运算方法、合并与分割。内容有: (1)基本运算;(2)矩阵相乘;(3)合并 tf.concat()、tf.stack();(4)分割 tf.split()、tf.unstack() 那我们开始吧。 1. 基本数学运算 开始之前,我们先定义两个tensor,下面的计算都使用这两个 # 2行2列的全为2的tensor a = tf.fill([2,2],2.) # 2行2列全1tensor,默认float32 b = tf.ones(

博观而约取,厚积而薄发 1794

TensorFlow2.0学习笔记(四)合并与分割

文章目录一、合并1.1 概念1.2 实现1.2.1 拼接1.2.2 堆叠二、分割2.1 概念2.2 实现2.2.1 tf.split2.2.2 tf.unstack 一、合并 1.1 概念        合并是指将多个张量在某个维度上合并为一个张量。以某学校班级成绩册数据为例,设张量????保存了某学校 1~4 号班级的成绩册,每个班级 35 个学生,共 8 门科目成绩,则张量????的 shape 为 [4,35,8];同样的方式,张

qq_38406123的博客 398

Tensorflow2.0笔记 - tensor的合并和分割

主要记录concat,stack,unstack和split相关操作的作用。

vivo01的专栏 986

深度学习2.0-6.tensorflow的高阶操作之合并与分割

文章目录1.合并与分割1.tf.concat-合并-原有的维度上进行累加2.tf.stack-合并-创造一个新的维度3.tf.unstack-不能指定打散的数量4.tf.split-分割-可以指定打散的数量 1.合并与分割 1.tf.concat-合并-原有的维度上进行累加 concat操作需要满足除拼接维度外,其余维度均相等 2.tf.stack-合并-创造一个新的维度 stack操作需要均相等 3.tf.unstack-不能指定打散的数量 4.tf.split-分割-可以指定打散的数量 ..

柳杰的博客 248

【TensorFlow2.0】张量合并&分割、数据统计、比较、填充与复制、数据限幅、高级操作

一、合并与分割 1.1合并   合并是将多个张量在某个维度上合并为一个张量。合并的两种方式:拼接和堆叠。   张量的合并:   (1)拼接concat:语法:tf.concat(tensor_list,axis),tensor_list保存了所有要拼接的张量,是一个列表,axis参数指定需要合并的维度索引。拼接操作不会产生新的维度,仅在现有的维度上合并。 拼接操作的唯一约束是非拼接的维度长度必须...

qq_36926037的博客 2255

TensorFlow2.0 编程基础

TensorFlow2.0 编程基础前言Tensor 数据类型tf.constant()tensorflow 中的 shapeisinstance(a,tf.Tensor) || tf.is_tensor(b) || a.dtypeisinstance(a,tf.Tensor)tf.is_tensor(b)a.dtypeConverttf.VariableTo Numpy创建 TensorFrom...

你的大数据学长 4346

TensorFlow2.0:张量其它操作 3

TensorFlow2.0版本已经正式发布,相比于1.X,2.0版的TensorFlow修改的不是一点半点,这些修改极大的弥补了1.X版本的反人类设计,提升了框架的整体易用性。 本文将TensorFlow的张量其它操作进行回顾,以作查漏补缺用。 合并与分割 数据统计 张量排序 数据的填充与复制 张量限幅 高阶操作 ...

Asdas_的博客 373

tf2.0这些也重要(二)——高级知识

前一篇文章介绍了TensorFlow的基础知识,主要是张量的基本操作,这篇文章主要介绍有些张量的进阶操作,譬如合并、分割、范数统计、填充、限幅等。 2.1 合并与分割 2.1.1 合并 合并是指将多个张量,按照某一维度进行合并,称为一个张量。 合并还分为拼接和堆叠两种操作。 拼接在TensorFlow中用 tf.concat(tensor_list, axis) 实现。 a = tf.random.normal([4, 32, 32, 3]) b = tf.random.normal([3, 32, 32,

weixin_40935425的博客 923

【Tensorflow】TensorFlow2.0高阶操作演示

TensorFlow2.0高阶操作演示合并与分割 合并与分割 数据统计 张量排序 填充与复制 张量限幅 高阶操作 tf.concat([a, b], axis) 沿着axis轴(维度)拼接若干个张量,必须保证参与拼接的各个张量除需要拼接的维度其他维度必须一致,concat不会创建新的维度,而是在原来的维度上累加。 tf.split tf.stack tf.unstack ...

小哲的博客 509
上一篇: Tensorflow2.0之Broadcasting
下一篇: Tensorflow2.0之根据索引号收集数据
AndSonder
博客等级 码龄7年 364粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值