阅读时间: 4 分钟
什么是TensorFlow?
TensorFlow是一个开源的端到端机器学习库。它用于预处理数据,对数据进行建模,并为模型提供服务(让它们进入其他人的手中)。
它有一个全面、灵活的工具、库和社区资源的生态系统,让研究人员推动ML的最先进水平。开发人员可以轻松地建立和部署由ML驱动的应用程序。
安装TensorFlow
TensorFlow在以下64位系统上被测试和支持。
- Python 3.6-3.9
- Ubuntu 16.04或更高版本
- Windows 7或更高版本(带C++再分配)。
- macOS 10.12.6(Sierra)或更高版本(不支持GPU)
下载一个软件包
用Python的pip软件包管理器安装TensorFlow。
注意:TensorFlow 2软件包要求pip 版本>19.0(或>20.3 for macOS)。
# Requires the latest pip
pip install --upgrade pip
Current stable release for CPU and GPU
pip install tensorflow
Or try the preview build (unstable)
pip install tf-nightly
运行一个TensorFlow容器
TensorFlow的Docker镜像已经被配置为运行TensorFlow。而且,Docker容器在虚拟环境中运行,是设置GPU支持的最简单方法。
docker pull tensorflow/tensorflow:latest # Download latest stable image
docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter # Start Jupyter server
谷歌Colab。学习和使用TensorFlow的简单方法
无需安装--通过Colaboratory在浏览器中直接运行TensorFlow教程。这是一个谷歌研究项目,旨在帮助传播机器学习教育和研究。它是一个Jupyter笔记本环境,使用时不需要设置,完全在云端运行。阅读博文。
Tensors简介
如果你曾经使用过NumPy,那么张量就有点像NumPy数组。
张量和NumPy数组的主要区别是,张量可以在GPU和TPU(张量处理单元)上使用。
能够在GPU和TPU上运行的好处是计算速度更快。因此,如果我们想在数据的数字表示中找到模式,一般来说,我们可以使用GPU和TPU更快地找到它们。
好了,我们已经谈了足够多的张量,让我们看看它们。
我们要做的第一件事是用通用别名tf导入TensorFlow。
# Import TensorFlow
import tensorflow as tf
print(tf.__version__) # find the version number (should be 2.x+)
创建张量
正如大多数程序都是从声明变量开始的。同样地,tensorFlow应用程序也是通过创建张量开始的。
一个张量是一个具有零维或多维的数组。一个零维的张量被称为标量。一个一维的张量被称为一个矢量。而二维张量被称为矩阵。
tf包提供了七个函数来形成已知值的张量。下表列出了这些函数并提供了每个函数的描述。
用已知的值创建张量
| 函数 | 说明 |
|---|---|
| constant(value, dtype=None, shape = None, name = 'Const', verify_shape=False) | 返回一个包含给定值的张量 |
| zeros(shape, dtype=tf.float32, name = None) | 返回一个充满零的张量 |
| ones(shape, dtype=tf.float32, name=None) | 返回一个充满1的张量 |
| fill(dims, value, name=None) | 返回一个充满给定值的张量 |
| linspace(start, stop, num, name=None) | 返回一个包含线性范围值的张量 |
| range(start, limit, delta=1, dtype=None, name='range') | 返回一个包含数值范围的张量 |
| range(limit, delta=1, dtype=None, name='范围') | 返回一个包含数值范围的张量 |
一个张量可以有多个维度,张量中的维度数就是它的等级。张量的维数的长度形成一个数组,称为张量的形状。表中的许多函数都接受一个形状参数,该参数确定了新张量的理想形状。下面的例子演示了如何设置这个参数。
[]- 张量包含一个单一的值。[3]- 张量是一个包含三个值的一维数组。[3, 4]- 张量是一个3-x-4的矩阵。[3, 4, 5]- 张量是一个多维数组,其尺寸等于3、4和5。
张量数据类型
| 数据类型 | 描述 |
|---|---|
bool | 布尔值 |
uint8/uint16 | 无符号整数 |
quint8/quint16 | 量化的无符号整数 |
int8/int16/int32/int64 | 有符号的整数 |
qint8/qint32 | 量化的有符号整数 |
float16/float32/float64 | 浮点值 |
complex64/complex128 | 复合浮点值 |
string | 字符串 |
上表中的每个函数都接受一个可选的名称参数,作为张量的标识符。应用程序可以通过张量的图来访问张量的名称。
表中最流行的函数是常数。它唯一需要的参数是第一个。它定义了要存储在张量中的一个或多个值。你可以在一个列表中提供这些值,下面的代码创建了一个包含三个浮点值的一维张量。
t1 = tf.constant([1.5, 2.5, 3.5])
多维数组使用类似的符号。下面的代码创建了一个2-x-2的矩阵,并将其每个元素设置为字母b。
t2 = tf.constant([['b', 'b'], ['b', 'b']])
但是,在这里,如果函数的第一个参数没有shape参数给出的形状,TensorFlow就不会引发错误。但是如果你把最后一个参数verify_shape设置为True。那么,TensorFlow将验证这两个形状是否相等。下面的代码提供了一个不匹配形状的例子。
t3 = tf.constant([4, 2], tf.int16, [3], 'Const', True)
在这种情况下,给定的形状,[3] ,与第一个参数的形状不匹配,这个参数是[2]。结果,TensorFlow显示以下错误。
TypeError: Expected Tensor's shape: (3,), got (2,).
零,一,和填充
然而,函数zeros, ones, and fill创建的张量的元素都具有相同的零和一的值,唯一需要的参数是形状。此外,它还确定了所需张量的形状。作为一个例子,下面的代码创建了一个简单的1-x-3向量,其元素等于0.0。
zero_tensor = tf.zeros([3])
同样,下面的函数调用创建了一个4x4的矩阵,其元素等于1.0。
one_tensor = tf.ones([4, 4])
填充函数需要一个值参数,用来设置张量元素的值。下面的代码创建了一个三维的张量,其值被设置为81.0。
fill_tensor = tf.fill([1, 2, 3], 81.0)
与零和一不同,fill没有一个dtype参数。因此,它只能创建包含32位浮点值的张量。
创建序列
linspace和range函数可以创建张量。而且,其元素在开始值和结束值之间有规律地变化。它们之间的区别在于,linspace创建的张量具有特定的数值数量。例如,下面的代码创建了一个1-x-5张量,其元素范围为5.0到9.0。
lin_tensor = tf.linspace(5., 9., 5)
与linspace不同,range不接受张量中元素的数量。相反,它通过增加一个叫做delta的值来计算连续的元素。在下面的代码中,delta被设置为0.5。
range_tensor = tf.range(3., 7., delta=0.5)
例如Python的范围函数,TensorFlow的范围函数可以在没有起始参数的情况下调用。在这种情况下,起始值被假定为0.0。下面的代码演示了这一点。
range_tensor = tf.range(1.5, delta=0.3)
如果delta参数是正的。结果,起始值必须小于终止值。而且,如果delta为负数。结果是,起始值必须大于终止值。
结语
总之,在这篇博客中,我们已经获得了TensorFlow的基础知识。因此,在下一篇博客中,我们将深入了解Tensorflow的更多信息。
快乐学习 🙂