侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

TensorFlow索引与切片的实现方法

技术  /  管理员 发布于 7年前   228

索引与切片在Tensorflow中使用的频率极其高,可以用来提取部分数据。

1.索引

在 TensorFlow 中,支持基本的[𝑖][𝑗]…标准索引方式,也支持通过逗号分隔索引号的索引方式。

假设创建四张大小为3*3的彩色图片。

# 创建张量x = tf.random.normal([4, 32, 32, 3])# 提取出第一张图片x[0]<tf.Tensor: id=253, shape=(32, 32, 3), dtype=float32, numpy=array([[[ 3.16146165e-01, 1.88969020e-02, 1.38413876e-01],    [ 4.89341050e-01, 2.75277281e+00, 7.39786148e-01],    [-1.25965345e+00, -2.69633114e-01, -1.16465724e+00],    ...,# 提取出第一张图片的第二行x[0][1]<tf.Tensor: id=261, shape=(32, 3), dtype=float32, numpy=array([[ 7.4337220e-01, -1.0524833e+00, -2.6401659e-03],    [ 5.3725803e-01, -9.5556659e-01, 4.9091709e-01],    [-4.6934509e-01, 7.9289172e-03, -2.9179385e+00],    [ 2.9324377e-01, 2.1451252e+00, -3.8849866e-01],    [ 8.2027388e-01, -4.9701610e-01, -7.3374517e-02],    ......# 提取出第一张图片的第二行第三列的像素x[0][1][2]<tf.Tensor: id=273, shape=(3,), dtype=float32, numpy=array([-0.4693451 , 0.00792892, -2.9179385 ], dtype=float32)># 提取出第一张图片第二行第三列第二个用到(B通道)的颜色强度x[0][1][2][2]<tf.Tensor: id=289, shape=(), dtype=float32, numpy=-2.9179385>

当张量的维度数较高时,使用[𝑖][𝑗]. . .[𝑘]的方式书写不方便,可以采用[𝑖,𝑗, … , 𝑘]的方式索引,它们是等价的。

x[1, 9, 2] == x[1][9][2]<tf.Tensor: id=306, shape=(3,), dtype=bool, numpy=array([ True, True, True])>

2.切片

通过𝑠𝑡𝑎𝑟𝑡: 𝑒𝑛𝑑: 𝑠𝑡𝑒𝑝切片方式可以方便地提取一段数据,其中 start 为开始读取位置的索引,end 为结束读取位置的索引(不包含 end 位),step 为读取步长。

还是以shape为[4, 32, 32, 3]的图片张量为例。

# 创建张量x = tf.random.normal([4, 32, 32, 3])# 读取第二张和第三张图片x[1:3]<tf.Tensor: id=344, shape=(2, 32, 32, 3), dtype=float32, numpy=array([[[[-3.4415385e-01, 5.8418065e-01, 1.8238322e-01],     [ 5.3377771e-01, 5.8201426e-01, 1.2839563e+00],     [-1.4592046e+00, -2.3443605e-01, -2.6524603e-01],     ...,     [-5.0662726e-01, 6.9743747e-01, -5.8803167e-02],     [ 1.4200432e+00, -5.0182146e-01, 5.1661726e-02],     [ 3.5610806e-02, -2.4781477e-01, 1.8222639e-01]],    [[ 1.3892423e+00, 1.1985755e+00, -6.4732605e-01],     [ 8.5562867e-01, 1.2758574e+00, 1.7331127e+00],     [ 9.7743452e-02, -5.3990984e-01, 8.3400911e-01],     ...,

 start: end: step切片方式有很多简写方式,其中 start、end、step 3 个参数可以根据需要选择性地省略,全部省略时即::,表示从最开始读取到最末尾,步长为 1,即不跳过任何元素。如 x[0,::]表示读取第 1 张图片的所有行,其中::表示在行维度上读取所有行,它等于x[0]的写法。

即x[0, ::]等价于x[0 ]。

为了更加简洁,::可以简写成为单个冒号。

x[:, 0:28:2, 0:28:2, :]<tf.Tensor: id=344, shape=(2, 32, 32, 3), dtype=float32, numpy=array([[[[-3.4415385e-01, 5.8418065e-01, 1.8238322e-01],     [ 5.3377771e-01, 5.8201426e-01, 1.2839563e+00],     [-1.4592046e+00, -2.3443605e-01, -2.6524603e-01],     ...,

上述表示取所有图片,隔行采样,隔列采样,采集所有通道信息。相当于在图片的高宽各放缩至原来的一半。

下面是一些常见的切片方式小结:

特别地,step可以为负数。例如:step = −1时,start: end: −1表示从 start 开始,逆序读取至 end 结束(不包含 end),索引号𝑒𝑛𝑑 ≤ 𝑠𝑡𝑎𝑟𝑡。

x = tf.range(9)# 逆序输出x[8:0:-1]<tf.Tensor: id=31, shape=(8,), dtype=int32, numpy=array([8, 7, 6, 5, 4, 3, 2, 1])># 逆序取全部元素x[::-1]<tf.Tensor: id=35, shape=(9,), dtype=int32, numpy=array([8, 7, 6, 5, 4, 3, 2, 1, 0])># 逆序间隔采样x[::-2]<tf.Tensor: id=39, shape=(5,), dtype=int32, numpy=array([8, 6, 4, 2, 0])>

当张量的维度数量较多时,不需要采样的维度一般用单冒号:表示采样所有元素。

x = tf.random.normal([4, 32, 32, 3])# 提取所有图片的G通道x[:,:,:,1]<tf.Tensor: id=59, shape=(4, 32, 32), dtype=float32, numpy=array([[[ 0.5700944 , 0.58056635, 2.2198782 , ..., -0.8475847 ,     0.49761978, 0.28784937],    [-0.22224228, 0.77950406, -0.01802959, ..., 0.55532527,     0.6826188 , 0.50668514],    [-2.4160695 , -0.96219736, 0.62681717, ..., 1.0348777 ,

为了避免出现像𝑥[: , : , : ,1]这样出现过多冒号的情况,可以使用⋯符号表示取多个维度上所有的数据,其中维度的数量需根据规则自动推断:当切片方式出现⋯符号时,⋯符号左边的维度将自动对齐到最左边,⋯符号右边的维度将自动对齐到最右边,此时系统再自动推断⋯符号代表的维度数量。

# 创建四张大小为32*32的彩色图片x = tf.random.normal([4, 32, 32, 3])# 读取第一张和第二张图片的G/B通道数据x[0:2,...,1:]# 读取最后两张图片x[2,...]# 读取所有图片的R/G通道x[...,:2]

掌握了张量的索引与切片之后,会让我们的书写更加快捷。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    通过celery异步处理一个查询任务的完整代码
    下一条:
    关于pandas的离散化,面元划分详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 2024.07.09日OpenAI将终止对中国等国家和地区API服务(0个评论)
    • 2024/6/9最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 国外服务器实现api.openai.com反代nginx配置(0个评论)
    • 2024/4/28最新免费公益节点SSR/V2ray/Shadowrocket/Clash节点分享|科学上网|免费梯子(1个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-12
    • 2024-02
    • 2024-04
    • 2024-05
    • 2024-06
    • 2025-02
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客