TensorFlow-similarity 学习笔记4

TensorFlow-similarity 学习笔记4

2021SC@SDUSC
学习内容:Tensorflow 概念总结和学习

深度学习是机器学习的一个子领域,它是一组受大脑结构和功能启发的算法。
TensorFlow 是 Google 创建并用于设计、构建和训练深度学习模型的第二个机器学习框架。使用 TensorFlow 库来进行数值计算,这本身似乎并不太特别,但这些计算都已完成与数据流图。在这些图中,节点代表数学运算,而边代表数据,通常是多维数据数组或张量,在这些边之间进行通信。
“TensorFlow”这个名字来源于神经网络对多维数据数组或张量执行的操作!它实际上是一个张量流。
下文介绍以交互方式执行深度学习:

  1. 首先了解有关张量的更多信息;
  2. 系统上安装 TensorFlow 的方法,开始并在工作区中加载数据;
  3. TensorFlow 基础知识
  4. 加载交通标志的数据,并通过简单的统计和绘图进行探索。
  5. 以一种可以将其提供给模型的方式来操作您的数据。重新缩放图像并将它们转换为灰度的原因。
  6. 开始你的神经网络模型,将逐层构建模型层;
  7. 架构设置好后,使用它来交互式地训练模型,并最终通过向其提供一些测试数据来对其进行评估。

介绍张量

向量是特殊类型的矩阵,它们是数字的矩形数组。因为向量是数字的有序集合,所以它们通常被视为列矩阵:它们只有一列和一定数量的行。换句话说,还可以将向量视为已指定方向的标量。
标量的示例是“5 米”或“60 m/sec”,而矢量是例如“北 5 米”或“东 60 m/秒”。这两者的区别显然是向量有方向。然而,这些示例可能在处理机器学习问题时可能遇到的向量相去甚远。数学向量的长度是一个纯数字:它是绝对的。另一方面,方向是相对的:它是相对于某个参考方向测量的,单位为弧度或度数。通常假设方向为正,并从参考方向逆时针旋转。

在这里插入图片描述
当然,在视觉上,将向量表示为箭头,如上图所示。这意味着可以将向量视为具有方向和长度的箭头。方向由箭头指示,而长度由箭头的长度指示。
那么平面向量呢?
平面向量是最简单的张量设置。它们很像常规向量,唯一的区别是它们发现自己位于向量空间中。从一个例子开始:你有一个 2 X 1 的向量。这意味着该向量属于一次成对出现的两个实数集。或者,换句话说,它们是两个空间的一部分。在这种情况下,您可以使用箭头或射线在坐标 (x,y) 平面上表示矢量。
在此坐标平面中,在向量的端点位于原点 (0,0) 的标准位置上工作,可以通过查看向量的第一行来导出 x 坐标,而在第二行中找到 y 坐标排。当然,这个标准位置并不总是需要保持:向量可以在平面中平行于自身移动而不会发生变化。
请注意,类似地,对于大小为 3 X 1 的向量,谈论的是三空间。可以将向量表示为一个 3 维图形,其中箭头指向向量步调中的位置:它们绘制在标准的 x、y 和 z 轴上。
拥有这些向量并在坐标平面上表示它们很好,可以对它们执行操作,并且可以帮助执行此操作的一件事是将向量表示为基数或单位向量。
单位向量是大小为 1 的向量。通常会通过带抑扬符的小写字母或“帽子”来识别单位向量。如果想将 2-D 或 3-D 向量表示为两个或三个正交分量(例如 x 轴和 y 轴或 z 轴)的总和,单位向量会很方便。
例如,将一个向量表示为分量的总和时,你会发现你在谈论分量向量,即两个或多个向量,其总和是给定的向量。
除了平面向量之外,还有协向量和线性算子是另外两种情况,它们三者有一个共同点:它们是张量的特定情况。张量是物理实体的数学表示,其特征可能在于幅度和多个方向。
并且,就像在 3 维空间中用单个数字表示一个标量和一个由三个数字组成的序列的向量一样,例如,张量可以用 3 维空间中的 3R 数字数组表示。
“R”表示张量的秩:这意味着在 3 维空间中,二阶张量可以用 3 的 2 或 9 次幂表示。在 N 维空间中,标量仍然只需要一个数字,而向量将需要 N 个数字,而张量将需要 N^R 个数字。这就解释了为什么经常听到标量是 0 阶张量:因为它们没有方向,可以用一个数字来表示它们。
考虑到这一点,识别标量、向量和张量并将它们区分开来是相当容易的:标量可以由单个数字表示,向量可以由一组有序的数字表示,而张量可以由一组数字表示。
使张量如此特别的是分量和基向量的组合:基向量在参考帧之间以一种方式变换,而分量变换的方式正是使分量和基向量之间的组合保持相同。

比利时交通标志:背景

比利时交通标志通常使用荷兰语和法语。但是对于您将要使用的数据集,这并不太重要!
比利时有六类交通标志:警告标志、优先标志、禁止标志、强制标志、与道路上停车和静止相关的标志,最后是指定标志。
2017年1月1日,比利时道路上拆除了3万多个交通标志,这些都是与速度有关的禁止标志。

加载和探索数据

# Import `tensorflow`
import tensorflow as tf

# Initialize two constants
x1 = tf.constant([1,2,3,4])
x2 = tf.constant([5,6,7,8])

# Multiply
result = tf.multiply(x1, x2)

# Print the result
print(result)
# Import `tensorflow` 
import tensorflow as tf

# Initialize two constants
x1 = tf.constant([1,2,3,4])
x2 = tf.constant([5,6,7,8])

# Multiply
result = tf.multiply(x1, x2)

# Intialize the Session
sess = tf.Session()

# Print the result
print(sess.run(result))

# Close the session
sess.close()

现在已经收集了更多背景信息,是时候在此处下载数据集了。获得“BelgiumTS for Classification(裁剪图像)”旁边列出的两个 zip 文件,它们分别称为“BelgiumTSC_Training”和“BelgiumTSC_Testing”。
将数据导入工作区。从出现在用户定义函数 (UDF) load_data() 下方的代码行开始:
首先,设置 ROOT_PATH。此路径是您为训练和测试数据创建目录的路径。
接下来,您可以在 join() 函数的帮助下将特定路径添加到 ROOT_PATH。您将这两个特定路径存储在 train_data_directory 和 test_data_directory 中。
之后,可以调用 load_data() 函数并将 train_data_directory 传递给它。
现在,load_data() 函数本身首先收集 train_data_directory 中存在的所有子目录;它是在列表理解的帮助下完成的,这是构建列表的一种很自然的方式 - 它基本上是说,如果您在 train_data_directory 中找到某些内容,如果是一个目录,把它添加到你的列表中。每个子目录都代表一个标签。
接下来,遍历子目录。首先初始化两个列表,标签和图像。接下来,收集子目录的路径以及存储在这些子目录中的图像的文件名。之后,可以在 append() 函数的帮助下收集两个列表中的数据。

在这里插入图片描述
可以清楚地看到,并非所有类型的交通标志在数据集中都有相同的表示。稍后在开始建模神经网络之前处理数据时将要处理的事情。
数据集中存在比其他标签更多的标签:标签 22、32、38 和 61 肯定会跳出。
看看一些随机的交通标志:
首先,在公共别名 plt 下导入了 matplotlib 包的 pyplot 模块。
然后,创建一个包含 4 个随机数的列表。选择 300、2250、3650 和 4000。
接下来,对于该列表长度中的每个元素,因此从 0 到 4,创建没有轴的子图。在这些子图中,您将显示图像数组中与索引 i 处的数字一致的特定图像。在第一个循环中,将 300 传递给 images[],在第二轮中传递 2250,依此类推。最后,将调整子图,使它们之间有足够的宽度。
剩下的最后一件事是在 show() 函数的帮助下显示情节
在这里插入图片描述

四张图大小不一样
通过打印包含在子图中的特定图像的形状、最小值和最大值来确认不同尺寸的假设。
“shape: {0}, min: {1}, max: {2}”上使用 format() 方法来填充参数 {0}、{1} 和 {2} 定义。
在这里插入图片描述可以通过绘制所有 62 个类的概述和属于每个类的一张图像
在这里插入图片描述
,带有标签 22、32、38 和 61 的交通标志明显更多。有 375 个实例的标签为 22,316 个实例的标签为 32,285 个实例,标签为 38,最后,282 个实例,标签为 61。
标签 22 和 32 是禁止标志,但标签 38 和 61 分别是指示标志和优先标志。 这意味着这四个之间没有直接联系,除了数据集中有一半的标志是禁止的。

下一篇博客将继续后续内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值