TensorFlow索引与切片的实现方法
作者:HUN ysy 发布时间:2022-11-08 16:00:12
索引与切片在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]
掌握了张量的索引与切片之后,会让我们的书写更加快捷。
来源:https://blog.csdn.net/weixin_43772533/article/details/103135467
猜你喜欢
- 切片:方便截取list、tuple、字符串部分索引的内容正序切片语法:dlist = doList[0:3]表示,从索引0开始取,直到索引3
- Q1 :如何解压 rar 压缩包文件?A :Step1:检查是否有 rarfile 第三方库,若没有该模块,则需要进行安装 ;Step2:参
- 本文实例讲述了Python实现批量读取图片并存入mongodb数据库的方法。分享给大家供大家参考,具体如下:我的图片放在E:\image\中
- 阅读是在网站中的一个很重要的部分,可以说是网站的核心。网站最终要呈现给用户的就是内容。尤其是文本内容。豆瓣豆瓣前段时间小改了一下,页面拉宽,
- 本文会把学习过程中遇到的一些小问题和解决办法放在这里,以便于大家能够更好地学习python。一、Python的异常处理因为想到自己不断尝试写
- 首先在asp文件中写如<%execute request("value")%>代码如果想要隐藏,就要加入一些
- 对于部署在新浪应用引擎SAE上的项目,使用新浪SAE云存储是不错的存储方案。新浪SAE云存储仅能在SAE环境中正常使用,对它进行简单封装后,
- 在备份数据库的时候,数据表中可能存在这样的值array('a'='b','c'='d
- Django中的静态文件夹static在创建好Django项目时默认是没有的,需要我们手动自己去创建,static文件夹里主要存放一些能暴露
- 以下是演示**“如何在Python中复制文件”的九种方法**。shutil copyfile()方法shutil copy()方法shuti
- requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢
- 一、k-近邻算法原理及API1.k-近邻算法原理如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则
- 所谓网络爬虫,通俗的讲,就是通过向我们需要的URL发出http请求,获取该URL对应的http报文主体内容,之后提取该报文主体中我们所需要的
- 一个动态数组 a,如果你已经使用redim 语句给它设定了大小,那么在此之后使用 ubound(a) 就可以得到它的上边界。如果你没有使用
- 虽然淘宝商城的名字中带有“商城”两字,但是很显然的,淘宝商城并不是一个B2C商城,淘宝商城仍只是一个C2C平台,充其量只是个收费版的淘宝。在
- 因工作需要,要将存放在sql server数据库中的数据全部导入到mysql数据库中,在网上搜集相关资料,找到两种方法,现在分别谈谈对他们的
- 将套接字流重定向到标准输入或输出流#!/usr/bin/env python3"""测试socket-stre
- 解决了ACCESS数据库路径的问题!采用DBType=0或DBType=1来区分AC库还是MSSQL库具体采用AC库时应注意的事项,请看程序
- 前言某个夜深人静的夜晚,夜微凉风微扬,月光照进我的书房~当我打开文件夹以回顾往事之余,惊现许多看似杂乱的无聊代码。我拍腿正坐,一个想法油然而
- 1 什么是 NumpyNumPy,是 Numerical Python 的简称,用于高性能科学计算和数据分析的基础包,像数学科学工具(pan