【深度学习_TensorFlow】索引与切片

这篇具有很好参考价值的文章主要介绍了【深度学习_TensorFlow】索引与切片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

这是一篇关于 TensorFlow基础索引与切片的操作,包括逗号索引,冒号索引,gather()函数, boolean_mask( )函数,作为初学者,文章难免有错误之处,还请不吝指正!


写在中间

( 1 )基础索引:变量[ ][ ]

  • 简单介绍

可以理解成多维数组的下标索引,索引方法是 变量名[ 下标 ][ 下标 ]

创建下面一个张量是什么意思?tf.ones( [ 3, 30, 30, 3 ] ) :它是一个四维的张量,形状为 (3, 30, 30, 3)。这个张量中的每个元素都是 1。具体来说,它是一个由 3 个 3x3x3 的矩阵组成的张量,每个矩阵中的每个元素都是 1 。

上述张量结合实际例子就可以理解为创建一个四维张量来储存图片信息,有3张照片,分别为30 * 30 的 3 通道彩色照片。

  • 代码示例
# 导入 TensorFlow 库
import tensorflow as tf
# 创建一个 3x30x30x3 的全1张量,默认dtype为float32
tensor = tf.ones([3, 30, 30, 3])
# 输出第一维(第一个3)的形状
print(tensor[0].shape)
# 输出第一维的第一行(索引0)的形状
print(tensor[0][0].shape)
# 输出第一维的第一行的第一个元素(索引0)的形状
print(tensor[0][0][0].shape)
  • 运行结果
(3, 3, 3)
(3, 3)
(3,)

( 2 )逗号索引:变量[ , ]

  • 简单介绍

还拿图像来举例,思路用法和上面的基础索引相同,只是形式上的不同。

  • 代码示例
# 生成一个形状为 [4, 28, 28, 3] 的四维张量,其中 4 表示样本数量,28 表示图像高度,28 表示图像宽度,3 表示图像通道数(RGB 三个通道)
tensor = tf.random.normal([4, 28, 28, 3])

# 打印 tensor[1] 的形状
print(tensor[1].shape)

# 打印 tensor[1, 2] 的形状,其中 1 表示第二个图像,2 表示高度的维度下标
print(tensor[1, 2].shape)

# 打印 tensor[1, 2, 3] 的形状,其中 3 表示宽度的维度下标
print(tensor[1, 2, 3].shape)

# 打印 tensor[1, 2, 3, 2] 的形状,其中 2 表示通道的维度下标
print(tensor[1, 2, 3, 2].shape)
  • 运行结果
(28, 28, 3)
(28, 3)
(3,)
()


( 3 )冒号切片:变量[ 开始 ; 结束 ]

  • 简单介绍

单冒号:变量[ start : end ]
原理:
前一个索引表示切片的起始位置,后一个索引表示切片的结束位置(结束位置不包括该位置的元素,简言之就是左闭右开。)
我们将从0-9的10个元素组成的tensor中( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] )切片
若从左到右正向索引,第一位元素0的下标就为0,后面依次是1,2,3…
若从右向左逆向索引,最后一位元素9的下标就为-1,从右向左依次为-2,-3…
特殊情况:
若左边的下标不写,编译器默认为1,若右边的下标不写,编译器默认为-1

双冒号:变量[ start : end : step ]
原理
在单冒号切片的基础之上,又加了一个步长(可正可负),就能实现相隔指定位置来切片
我们讲从0~9的10个元素组成的tensor中( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] )切片
若步长为正值,则从左到右,正向每隔指定步长取值
若步长为负值,则从右到左,逆向每隔指定步长取值
特殊情况
若左边的下标不写,逆向时start对应最后一个元素,end对应第一个元素

  • 单冒号代码示例
# 创建一个包含 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 的张量
tensor = tf.range(10)
# 输出整个张量
print(tensor)

# 输出张量最后一个元素(即索引为 -1 的元素)
print(tensor[-1:])

# 输出张量倒数第二个和最后一个元素(即索引为 -2 和 -1 的元素)
print(tensor[-2:])

# 输出张量前两个元素(即从索引 0 开始到索引 1 的元素)
print(tensor[:2])

# 输出张量除最后一个元素外的所有元素(即从索引 0 开始到索引 -2 的元素)
# 为什么看原理的红字部分
print(tensor[:-1])
  • 双冒号代码示例
# 导入 TensorFlow 库
import tensorflow as tf
# 创建一个 4x28x28x3 的全为一张量
tensor = tf.ones([4, 28, 28, 3])
# 打印张量的形状
print(tensor.shape)  # 输出: (4, 28, 28, 3)
# 打印张量的一部分形状
print(tensor[0:2, :, :, :].shape)

print(tensor[:, 0:28:2, 0:28:2, :].shape)

print(tensor[:, :14, :14, :].shape)

print(tensor[:, 14:, 14:, :].shape)

print(tensor[:, ::2, ::2, :].shape)

# 创建一个包含 [0, 1, 2, 3] 的张量
tensor = tf.range(4)
# 输出整个张量
print(tensor)
# 以倒序输出张量的每一个元素
print(tensor[::-1])
# 以倒序输出张量中的3和1
print(tensor[::-2])
# 以倒序输出张量中的2,1,0
print(tensor[2::-1])
  • 单冒号运行结果
tf.Tensor([0 1 2 3 4 5 6 7 8 9], shape=(10,), dtype=int32)
tf.Tensor([9], shape=(1,), dtype=int32)
tf.Tensor([8 9], shape=(2,), dtype=int32)
tf.Tensor([0 1], shape=(2,), dtype=int32)
tf.Tensor([0 1 2 3 4 5 6 7 8], shape=(9,), dtype=int32)
  • 双冒号运行结果
(4, 28, 28, 3)
(2, 28, 28, 3)
(4, 14, 14, 3)
(4, 14, 14, 3)
(4, 14, 14, 3)
(4, 14, 14, 3)
tf.Tensor([0 1 2 3], shape=(4,), dtype=int32)
tf.Tensor([3 2 1 0], shape=(4,), dtype=int32)
tf.Tensor([3 1], shape=(2,), dtype=int32)
tf.Tensor([2 1 0], shape=(3,), dtype=int32)

( 4 )tf.gather( )函数

  • 简单介绍

tf.gather( tensor, axis, indices=[ ] )
value:代表tensor数据
axis: 代表取哪个维度
indices: 数据收集顺序,指定维度的具体索引

  • 代码示例
# 假设tensor为【班级,学生,科目】
tensor = tf.ones([4, 35, 8])

# axis=0代表班级维度,即收集第2个和第3个班级的所有人的所有成绩
# 会得到2个班级,35名同学的8门成绩
print(tf.gather(tensor, axis=0, indices=[2, 3]).shape)

# axis=1代表班级维度,即收集第2名、第3名、第7名和第9名学生的所有成绩
# 会得到4个班级,4名学生的8门成绩
print(tf.gather(tensor, axis=1, indices=[2, 3, 7, 9]).shape)

# axis=2代表成绩维度,即收集所有班级的所有学生的第2门和第3门成绩
# 会得到4个班级,35名同学的2门成绩
print(tf.gather(tensor, axis=2, indices=[2, 3]).shape)

  • 运行结果
(2, 35, 8)
(4, 4, 8)
(4, 35, 2)

( 5 )tf.boolean_mask( )函数

  • 简单介绍

tf.boolean_mask( tensor, mask=布尔标记, axis=指定维度 )
布尔标记为True或者False
axis在不赋值的情况下,默认为0

  • 代码示例
# 假设tensor为【班级,学生,科目,作业】
tensor = tf.ones([4, 28, 8, 3])

# 收集班级维度中的第1个和第3个班级的全部学生的所有科目的所有作业
print(tf.boolean_mask(tensor, mask=[True, False, True, False], axis=0).shape)  # True和False不能少写

# 收集作业维度中的全部班级的所有学生的所有科目的第1门和第3门作业
print(tf.boolean_mask(tensor, mask=[True, False, True], axis=3).shape)
  • 运行结果
(2, 28, 8, 3)
(4, 28, 8, 2)

写在后面

👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!文章来源地址https://www.toymoban.com/news/detail-495247.html

到了这里,关于【深度学习_TensorFlow】索引与切片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [深度学习] 基于切片辅助超推理库SAHI优化小目标识别

    对象检测是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题,这是因为小目标物体有效特征少,覆盖范围少。小目标物体的定义通常有两种方式。一种是绝对尺度定义,即以物体的像素尺寸来判断是否为小目标,如

    2024年02月03日
    浏览(29)
  • 深度学习TensorFlow

      博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。 专栏简介:   本专栏主要研

    2023年04月08日
    浏览(28)
  • 【深度学习笔记】TensorFlow 基础

    在 TensorFlow 2.0 及之后的版本中,默认采用 Eager Execution 的方式,不再使用 1.0 版本的 Session 创建会话。Eager Execution 使用更自然地方式组织代码,无需构建计算图,可以立即进行数学计算,简化了代码调试的过程。本文主要介绍 TensorFlow 的基本用法,通过构建一个简单损失函数

    2024年02月13日
    浏览(31)
  • 【深度学习_TensorFlow】梯度下降

    一直不太理解梯度下降算法是什么意思,今天我们就解开它神秘的面纱 如果要求出一条直线,我们只需知道直线上的两个不重合的点,就可以通过解方程组来求出直线 但是,如果我们选取的这两个点不在直线上,而是存在误差(暂且称作观测误差),这样求出的直线就会和

    2024年02月14日
    浏览(26)
  • 【深度学习_TensorFlow】激活函数

    上篇文章我们了解到感知机使用的阶跃函数和符号函数,它们都是非连续,导数为0的函数: 建议回顾上篇文章,本篇文章将介绍神经网络中的常见激活函数,这些函数都是平滑可导的,适合于梯度下降算法。 激活函数是做什么的? 激活函数(Activation Function)是神经网络中

    2024年02月13日
    浏览(31)
  • 【深度学习_TensorFlow】误差函数

    搭建完网络层后,在每层网络中都要进行前向计算,下一步就是选择合适的误差函数来计算误差。其中均方差函数和交叉熵函数在深度学习中比较常见,均方差函数主要用于回归问题,交叉熵函数主要用于分类问题。 ( 1 )简单介绍 均方差函数(简称 MSE)把输出向量和真实向

    2024年02月14日
    浏览(568)
  • 【深度学习_TensorFlow】过拟合

    过拟合与欠拟合 欠拟合: 是指在模型学习能力较弱,而数据复杂度较高的情况下,模型无法学习到数据集中的“一般规律”,因而导致泛化能力弱。此时,算法在训练集上表现一般,但在测试集上表现较差,泛化性能不佳。 过拟合: 是指模型在训练数据上表现很好,但在测

    2024年02月10日
    浏览(30)
  • 深度神经网络基础——深度学习神经网络基础 & Tensorflow在深度学习的应用

    Tensorflow入门(1)——深度学习框架Tesnsflow入门 环境配置 认识Tensorflow 深度学习框架Tesnsflow 线程+队列+IO操作 文件读取案例 神经网络的种类: 基础神经网络:单层感知器,线性神经网络,BP神经网络,Hopfield神经网络等 进阶神经网络:玻尔兹曼机,受限玻尔兹曼机,递归神经

    2024年02月16日
    浏览(30)
  • 17- TensorFlow中使用Keras创建模型 (TensorFlow系列) (深度学习)

    知识要点 Keras 是一个用 Python 编写的高级神经网络 API 数据的开方:  np.sqrt(784)       # 28 代码运行调整到 CPU 或者 GPU: 模型显示: model.summary () 创建模型: 模型创建: model = Sequential () 添加卷积层: model.add (Dense(32, activation=\\\'relu\\\', input_dim=100))  # 第一层需要 input_dim 添加dropout: mod

    2024年02月01日
    浏览(76)
  • Tensorflow入门(1)——深度学习框架Tesnsflow入门 & 环境配置 & 认识Tensorflow

    1.anaconda以及Tensorflow的安装: https://blog.csdn.net/qq_33505204/article/details/81584257 2.Anaconda详细安装及使用教程: https://blog.csdn.net/ITLearnHall/article/details/81708148 3.windows平台下,TensorFlow的安装、卸载以及遇到的各种错误: https://blog.csdn.net/qq_27245699/article/details/81050035 CONDA环境安装: co

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包