中国大学mooc课程笔记:《人工智能实践:Tensorflow笔记》曹健 第三讲:Tensorflow框架 课程地址
基于Tensorflow的NN: 用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型。
张量
张量(tensor):就是一个多维数组(列表) 阶:张量的维度 (可以表示0-n阶数组)
- 0阶 —-> 标量 scalar
- 1阶 —-> 向量 vector
- 2阶 —-> 矩阵 matrix
- n阶 —-> 张量 tensor
判断张量是几阶的,就通过张量右边的方括号数,0 个是 0 阶,n 个是 n 阶,张量可以表示 0 阶到 n 阶数组(列表)
举例 t=[ [ [… ] ] ]为 3 阶
课程的实践环境是在Linux系统下,用vim编辑器。而我则是在windows下用PyCharm+Anaconda,来编写和执行文件。不过在这里还是记录下老师在Linux下的操作。
1 |
|
看具体代码实现一个__计算图__
1 |
|
可以打印出这样一句话:
1 |
|
计算图
计算图(Graph): 搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算
举例:
神经网络的基本模型是神经元,神经元的基本模型其实就是数学中的乘、加运算。我们搭建如下的计算图:
x1、x2 表示输入,w1、w2 分别是 x1 到 y 和 x2 到 y 的权重,y=x1w1+x2w2。
我们实现上述计算图:
1 |
|
可以打印出这样一句话:
1 |
|
此时,只是完成了一个计算图的设计,就像是完成了公式的推导,还没有实际计算,如果我们想得到运算结果就要用到“会话 Session()”了。
会话
会话(Session): 执行计算图中的节点运算。
我们用 with 结构实现,语法如下:
1 |
|
举例:
对于刚刚所述计算图,我们执行 Session()会话可得到矩阵相乘结果:
1 |
|
可以打印出这样的结果:
1 |
|
我们可以看到,运行Session()会话前只打印出y是个张量的提示,运行Session() 会话后打印出了 y 的结果 1.0 x 3.0 + 2.0 x 4.0 = 11.0。
拓展:
计算两个2x2矩阵相乘:
import tensorflow as tf
x = tf.constant([[1.0, 2.0], [3.0, 4.0]])
w = tf.constant([[2.0, 1.0], [4.0, 3.0]])
y = tf.matmul(x, w)
print(y)
with tf.Session() as sess:
print(sess.run(y))
结果:是一个2x2矩阵
但这在神经网络中似乎没有用,最开始应该是一个1 x n
的行向量作为输入层,n为取得特征值数,然后经过隐藏层的计算,最后的结果为一个值。
小结:
这篇博客大部分时间用在了Jekyll writer的功能熟悉上,后边逐渐掌握软件功能后写博客的速度会逐渐加快,也希望能行成自己的博客风格。另外感叹自己线性代数学着忘着,得多写写博客反复理解吧。