TensorFlow是由Google开发的一个流行的开源机器学习框架,它被广泛应用于研究和工业中的深度神经网络的训练和推理。相比于从零开始构建机器学习和深度学习模型,使用TensorFlow这样的库可以让更容易、更快速地训练模型。这是因为TensorFlow提供了构建模型所需的所有基础功能。
TensorFlow在视觉、视频到表格数据等广泛领域都有应用。如果深入到任何操作的基础,可以看到数据被转换成了数字(即张量),然后机器学习算法利用这些数字来寻找模式。接下来,让看看什么是张量,以及它们是如何被创建和操作的。
张量类似于NumPy数组。如果之前没有使用过NumPy,可以将张量视为数据的多维数值表示。这些数据可以是数字(作为数字的张量)、图像(矩阵形式的张量)、文本(数组形式的张量)或任何形式的数据(任何n维的张量表示)。
NumPy数组和张量的主要区别在于,张量可以在图形处理单元(GPU)和张量处理单元(TPU)上使用。使用GPU和TPU的好处是计算速度更快,深度学习模型在输入数据中寻找模式所需的时间更少。
首先,导入TensorFlow:
import tensorflow as tf
print(tf.__version__)
现在使用tf.constant()
创建一些不同维度的张量:
# 创建一个标量,即0阶张量
scalar = tf.constant(3)
# 创建一个向量,即1阶张量
vector = tf.constant([1, 2])
# 创建一个矩阵,即2阶张量
matrix = tf.constant([[1, 2], [3, 4]])
# 创建一个3阶张量
tensor = tf.constant([[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]])
在上面的代码中,创建了四个不同维度的张量。使用tf.constant()
可以创建任何维度的不可变张量。让打印它们并检查它们的详细信息。
每个张量都有shape
和dtype
属性。dtype
表示张量的数据类型。默认情况下,所有张量都被分配了int32
的数据类型。但可以在创建张量时手动指定数据类型。
# 手动指定数据类型
float_tensor = tf.constant([[1, 2], [3, 4]], dtype=tf.float32)
常用的数据类型包括tf.float32
、tf.float13
、tf.int32
和tf.int16
。还可以检查张量的其他属性,如秩、形状、大小和维度。
让看看如何使用tf.variable()
创建变量:
# 使用常量和变量创建相同张量
constant_tensor = tf.constant([[1, 2], [3, 4]])
variable_tensor = tf.Variable([[1, 2], [3, 4]])
常量张量和变量张量的区别在于后者是可变的,即它们的值可以被改变,而使用tf.constant()
创建的张量是不可变的。可以使用assign()
方法更新变量张量的值。
可以使用TensorFlow生成随机张量:
random1 = tf.random.Generator.from_seed(42)
random1 = random1.normal(shape=(3, 2))
观察到使用相同种子生成的两个张量是相同的。如果使用不同的种子,将会观察到不同的结果。这称为伪随机性,即它们看起来是随机的,但实际上不是。这在机器学习模型训练期间生成相同的验证集时有应用。
还可以在TensorFlow中随机打乱张量(当然,可以设置种子):
# 创建一个张量
not_shuffled = tf.constant([[1, 2], [3, 4], [5, 6]])
现在让看看NumPy数组和TensorFlow张量之间的互操作性。可以将NumPy数组转换为TensorFlow张量,以便于操作,反之亦然。
import numpy as np
# 创建一个NumPy数组
numpy_array = np.arange(1, 10, dtype=np.int32)
要将NumPy数组转换为张量,需要传递张量的形状,并且它应该与输入数组的大小相匹配。现在让看看可以对张量执行的一些操作。
可以直接在张量上执行所有基本的算术操作,如加法、减法等。
# 张量操作
sample_tensor = tf.constant([[10, 13], [23, 5]])
TensorFlow还具有支持相同操作的函数。
# 使用TensorFlow函数进行张量操作
sample_tensor = tf.constant([[10, 7], [3, 4]])
可以看到,两个结果是一样的……那么为什么需要一个单独的函数,当可以直接进行操作呢?这是因为TensorFlow函数在作为TensorFlow图的一部分运行时,速度更快,更容易处理。
还可以使用TensorFlow将一个张量的数据类型转换为另一个。
# 创建一个默认数据类型为float32的新张量
A = tf.constant([1.7, 7.4])
已经创建了两个具有不同数据类型的张量,即float32和int32。
最后,让看看如何使用TensorFlow检查可用的物理设备列表。
print(tf.config.list_physical_devices())
从上面的代码中,将获得可用于计算的设备列表,即CPU、GPU和TPU。还可以使用以下命令检查是否有任何Nvidia GPU可用。
!nvidia-smi
在这篇博客中,讨论了一些关于TensorFlow深度学习基础的重要概念。上述讨论的大多数操作将由TensorFlow在深度学习中自动完成,当使用一些高级函数时,但了解这些底层概念和代码将有助于调试或测试代码。
阅读网站上更多关于TensorFlow的文章。