娱乐建设网站怎么开网店商城
2026/1/1 9:48:51 网站建设 项目流程
娱乐建设网站,怎么开网店商城,好品质高端网站设计推荐,网站开发PHP留言本零基础吃透#xff1a;TensorFlow张量切片与数据插入#xff08;附目标检测/NLP实战场景#xff09; 张量切片#xff08;提取子部分#xff09;和数据插入是TensorFlow处理结构化数据的核心操作#xff0c;广泛用于目标检测#xff08;特征路由、选框特征提取#xff…零基础吃透TensorFlow张量切片与数据插入附目标检测/NLP实战场景张量切片提取子部分和数据插入是TensorFlow处理结构化数据的核心操作广泛用于目标检测特征路由、选框特征提取、NLP单词遮盖、序列切片等场景。本文拆解「张量切片」「数据插入」两大核心模块结合实战示例讲清tf.slice/tf.gather/tf.scatter_nd等API的用法、原理和场景适配。前置准备必运行importtensorflowastfimportnumpyasnp# 消除GPU警告不影响功能importos os.environ[TF_CPP_MIN_LOG_LEVEL]2一、提取张量切片核心场景特征筛选/序列截取核心应用场景目标检测从特征图中切片提取目标框对应的特征、按路由规则拆分样本特征NLP截取句子的子序列、提取指定位置的单词如遮盖任务选待遮盖单词。1. 基础切片tf.slice 与 Python风格切片tf.slice是TensorFlow原生切片APIPython风格切片[]更简洁二者功能等价支持一维/二维/高维张量。1.1 一维张量切片# 基础一维张量t1tf.constant([0,1,2,3,4,5,6,7])# 方式1tf.slicebegin起始索引size截取长度slice_resulttf.slice(t1,begin[1],size[3])print(tf.slice结果,slice_result.numpy())# [1 2 3]# 方式2Python风格切片start:stop左闭右开python_slice1t1[1:4]# 等价于begin[1], size[3]python_slice2t1[-3:]# 最后3个元素print(Python切片[1:4],python_slice1.numpy())# [1 2 3]print(Python切片[-3:],python_slice2.numpy())# [5 6 7]1.2 二维张量切片目标检测特征图切片# 4行5列的二维张量模拟目标检测特征图t2tf.constant([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]])# 切片所有行除最后一行:-1列1到31:3slice_2dt2[:-1,1:3]print(\n二维张量切片结果)print(slice_2d.numpy())输出[[ 1 2] [ 6 7] [11 12]]1.3 高维张量切片3D特征图# 2×2×4的三维张量模拟批量特征图t3tf.constant([[[1,3,5,7],[9,11,13,15]],[[17,19,21,23],[25,27,29,31]]])# tf.slicebegin[1,1,0]第1个批量、第1行、第0列size[1,1,2]截取1×1×2slice_3dtf.slice(t3,begin[1,1,0],size[1,1,2])print(\n三维张量切片结果)print(slice_3d.numpy())# [[[25 27]]]2. 跨步切片tf.strided_slice间隔截取tf.strided_slice支持「跨步」截取类似NumPy的[start:stop:step]适合按固定间隔提取元素如NLP每隔k个单词采样。# 一维张量跨步切片起始0结束8步长3strided_slicetf.strided_slice(t1,begin[0],end[8],strides[3])print(\n跨步切片结果,strided_slice.numpy())# [0 3 6]# 等价于Python风格t1[::3]print(Python跨步切片,t1[::3].numpy())# [0 3 6]3. 单轴任意索引提取tf.gathertf.gather从单个轴提取「非均匀索引」的元素无需间隔适合NLP提取指定位置的字符/单词、目标检测选指定样本。# 示例1提取t1的0、3、6索引gather_1dtf.gather(t1,indices[0,3,6])print(\ntf.gather提取指定索引,gather_1d.numpy())# [0 3 6]# 示例2NLP提取任意字符非均匀索引alphabettf.constant(list(abcdefghijklmnopqrstuvwxyz))gather_chartf.gather(alphabet,indices[2,0,19,18])# c、a、t、sprint(提取任意字符,gather_char.numpy())# [bc ba bt bs]4. 多轴任意索引提取tf.gather_ndtf.gather_nd从多个轴提取元素支持矩阵元素、高维张量任意位置是目标检测「提取指定目标框特征」的核心API。示例1提取矩阵指定行# 5行2列矩阵t4tf.constant([[0,5],[1,6],[2,7],[3,8],[4,9]])# 提取第2、3、0行索引[[2], [3], [0]]gather_2d_rowtf.gather_nd(t4,indices[[2],[3],[0]])print(\n提取矩阵指定行)print(gather_2d_row.numpy())输出[[2 7] [3 8] [0 5]]示例2提取高维张量任意位置元素# 2×3×3的三维张量模拟批量特征图t5np.reshape(np.arange(18),[2,3,3])# 提取单个元素[0,0,0]和[1,2,1]gather_3d_elemtf.gather_nd(t5,indices[[0,0,0],[1,2,1]])print(\n提取高维张量单个元素,gather_3d_elem.numpy())# [ 0 16]# 提取多个子矩阵[[0,0], [0,2]] 和 [[1,0], [1,2]]gather_3d_mattf.gather_nd(t5,indices[[[0,0],[0,2]],[[1,0],[1,2]]])print(\n提取多个子矩阵)print(gather_3d_mat.numpy())二、插入数据到张量核心场景遮盖/特征更新核心应用场景NLP单词遮盖将选中的单词位置插入遮盖标记MASK目标检测更新特征图中目标框的特征值、构造稀疏特征张量矩阵操作构造魔法方阵、单位矩阵。1. 零初始化插入tf.scatter_ndtf.scatter_nd在全零张量的指定索引处插入数据是模拟稀疏张量的核心方法无需显式构造SparseTensor。# 构造参数indices插入位置updates插入值shape目标张量形状t6tf.constant([10])# shape[10]的全零张量indicestf.constant([[1],[3],[5],[7],[9]])# 插入位置datatf.constant([2,4,6,8,10])# 插入值scatter_resulttf.scatter_nd(indicesindices,updatesdata,shapet6)print(\ntf.scatter_nd插入结果)print(scatter_result.numpy())# [ 0 2 0 4 0 6 0 8 0 10]模拟稀疏张量tf.gather_nd tf.scatter_nd# 步骤1从t2提取指定位置的值new_indicestf.constant([[0,2],[2,1],[3,3]])t7tf.gather_nd(t2,indicesnew_indices)# 提取值2、11、18# 步骤2将值插入全零张量模拟稀疏张量t8tf.scatter_nd(indicesnew_indices,updatest7,shapetf.constant([4,5]))print(\n模拟稀疏张量插入结果)print(t8.numpy())# 等价于构造SparseTensor后转密集t9tf.sparse.SparseTensor(indices[[0,2],[2,1],[3,3]],values[2,11,18],dense_shape[4,5])t10tf.sparse.to_dense(t9)print(\nSparseTensor转密集结果与上一致)print(t10.numpy())输出[[ 0 0 2 0 0] [ 0 0 0 0 0] [ 0 11 0 0 0] [ 0 0 0 18 0]]2. 已有张量插入加减tf.tensor_scatter_nd_add/sub在已有值的张量上对指定索引执行「加法/减法」更新适合动态修改特征值。示例1构造魔法方阵加法更新# 初始张量t11tf.constant([[2,7,0],[9,0,1],[0,3,8]])# 在指定位置加值构造魔法方阵每行/列和为15t12tf.tensor_scatter_nd_add(t11,indices[[0,2],[1,1],[2,0]],# 插入位置updates[6,5,4]# 加6、加5、加4)print(\n魔法方阵加法更新)print(t12.numpy())输出[[2 7 6] [9 5 1] [4 3 8]]示例2构造单位矩阵减法更新# 从t11中减去指定值得到单位矩阵t13tf.tensor_scatter_nd_sub(t11,indices[[0,0],[0,1],[1,0],[1,1],[1,2],[2,1],[2,2]],updates[1,7,9,-1,1,3,7])print(\n单位矩阵减法更新)print(t13.numpy())输出[[1 0 0] [0 1 0] [0 0 1]]3. 极值插入tf.tensor_scatter_nd_min/max在指定索引处将张量值更新为「当前值」与「插入值」的最小值/最大值适合特征值的极值约束。# 初始张量t14tf.constant([[-2,-7,0],[-9,0,1],[0,-3,-8]])# 最小值更新指定位置取当前值和插入值的最小t15tf.tensor_scatter_nd_min(t14,indices[[0,2],[1,1],[2,0]],updates[-6,-5,-4])print(\n最小值更新结果)print(t15.numpy())# 最大值更新指定位置取当前值和插入值的最大t16tf.tensor_scatter_nd_max(t14,indices[[0,2],[1,1],[2,0]],updates[6,5,4])print(\n最大值更新结果)print(t16.numpy())输出# 最小值更新 [[-2 -7 -6] [-9 -5 1] [-4 -3 -8]] # 最大值更新 [[-2 -7 6] [-9 5 1] [ 4 -3 -8]]三、实战场景落地NLP单词遮盖示例# 模拟NLP单词遮盖任务# 1. 构造句子张量单词索引[I, like, ragged, tensors] → [0,1,2,3]sentencetf.constant([0,1,2,3],dtypetf.int32)# 2. 选择要遮盖的单词索引2raggedmask_indicestf.constant([[2]])# 3. 提取遮盖单词用于标签mask_labeltf.gather_nd(sentence,mask_indices)print(遮盖单词标签,mask_label.numpy())# [2]# 4. 插入遮盖标记MASK→索引99masked_sentencetf.scatter_nd(indicesmask_indices,updates[99],shapetf.constant([4])# 句子长度4)# 5. 合并未遮盖位置保留原词遮盖位置为99final_sentencetf.where(masked_sentence0,sentence,masked_sentence)print(遮盖后的句子,final_sentence.numpy())# [ 0 1 99 3]核心API总结表操作类型API核心功能典型场景基础切片tf.slice / Python[]按范围截取张量子部分特征图区域截取、序列子串提取跨步切片tf.strided_slice按固定间隔截取元素序列采样、特征降采样单轴索引提取tf.gather单轴非均匀索引提取NLP字符/单词提取、样本筛选多轴索引提取tf.gather_nd多轴任意位置提取目标框特征提取、高维张量取值零初始化插入tf.scatter_nd全零张量指定位置插入数据构造稀疏张量、NLP单词遮盖已有张量加减tf.tensor_scatter_nd_add/sub已有张量指定位置加减值魔法方阵、单位矩阵构造极值插入tf.tensor_scatter_nd_min/max指定位置更新为极值特征值极值约束、异常值修正避坑关键索引维度匹配tf.gather_nd的indices维度需与张量秩匹配如二维张量的indices每行长度为2形状一致性tf.scatter_nd的shape需与插入后张量形状一致否则报错原地更新所有插入操作均返回新张量TensorFlow张量不可变需接收返回值稀疏场景优选大量零值插入时优先用tf.scatter_nd或SparseTensor避免密集张量浪费内存。掌握这些操作可灵活处理目标检测/NLP中的张量拆分、重组、更新需求是TensorFlow进阶的核心基础。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询