前言:
从本质上讲,tensorflow其实真的只是把python和numpy的一些基本功能封装了一下,从而提供了一套上层API,然后提供了一套人工智能相关的算法实现API。客观点说tensorflow1.x很失败,目前Tensorflow2因为默认了eager执行和集成keras作为人工智能算法的标准API才被广泛接受。
1、学习前必须了解的概念:张量和数据流图
1.1、张量:可以认为是数组和常量的总称呼,一般用阶表示,常量为0阶,向量(一维数组)结构为1阶,N维数组,为N阶
数据 | 数学称呼 | 张量称呼 |
1 | 常量或者标量 | 0阶张量 |
[1,2,3,4,5] | 一维数组,向量 | 1阶张量 |
[[1,2,3,4,5], [6,7,8,9,10]] | 二维数组,矩阵 | 2阶张量 |
[[[1,2,3,4,5], [6,7,8,9,10]], [[11,12,13,14,15], [16,17,18,19,20]]] | 三维数组 | 3阶张量 |
N维结构 | N维数组 | 阶张量 |
在数学上,我们通常用一维数组和多维数组表示一个数据集合,比如:
我们要表示一个人的身高,体重,年龄可以写成 [175, 70, 30]这样的一维数组形式
这个数组的第一个元素表示身高,第二元素表示体重,第三个元素表示年龄,这个一维数组可以认为是一阶张量
如果要表示3个人的身高体重,可以写成二维数组结构
[ [175, 70, 30]
[180, 80, 25]
[166, 70, 33] ]
这个结构,可以理解为一个二阶张量,那么我们就可以很好地理解其实二维结构和excel表格数据很类似,但是在人工智能领域,通常会用到三维、四维以上的数组结构,可以称为三维张量,四维张量直到N维度张量
那么,单独一个数比如:10怎么称呼呢,其实对于数学上的常量来说,可以认为是0阶张量
所以,所谓的张量其实是一种为了在人工智能领域统一称呼数据(常数)或者数据集合(一维或N维数组)采用的一个新名称
1.2、数据流图:
数学上,我们通常会进行数学运算,简单的加减乘除,如果写复杂一点,比如一个复杂的公式
例如:(1+2)*3 - 5 对于这个较为复杂的公式的计算过程,我们可以画图表示:
读起来就是:3和4加法的计算结果,再与3相乘的计算结果,然后减去5,得到最终的计算结果。
可以很好理解,其实就是我们数据复杂计算过程,使用了一个图形化的表示,那么TensorFlow的数据流图又有何差异呢?
其实就是计算过程的差异,机器学习和人工智能领域,已经不再是单纯的加减法,而是复杂的数学变换和数学计算,比如:
矩阵点积运算,基于最小二乘法的优化器计算(内部采用梯度下降算法),矩阵的变换,sigmod变换,softmax变换等,输入已经不是一个数或者几个数,而是一个
2、安装Tensorflow:pip install tensorflow
一般都不会报错,能够很快地安装成功。
3、编写第一个tensorflow代码
# 引入tensorflow2
import tensorflow as tf
# 查看一下当前的版本号
print(tf.version.VERSION)
# 定义tensor常量
hello = tf.constant('Hello tensorflow!')
print(hello)
执行结果为:
Tensor结构的实质可以理解为是对numpy结构进一步封装,后续博客内容讲消息解说。