附:课程链接
第三讲.Tensorflow框架
3.1张量、计算图、会话
由于个人使用Win7系统,并未完全按照课程所讲,以下记录的也基本是我的结合课程做的Windows系统+PyCharm操作。且本人有python基础,故一些操作可能简略。并未完全按照网课。
记住编写代码时,除注释内容外,字符均使用英文格式。
本节课程目标:搭建第一个神经网络,总结搭建八股。
1.基于Tensorflow的NN(Neural Networks神经网络):用张量表示数据,用计算图搭建神经网络,用会话执行计算图,再优化线上的权重(参数),得到更准确的模型。
2.张量(tensor):多维数组(多维列表)。用“阶”来表示张量的维度。
0阶张量→标量,表示一个单独的数。例如:S = 123
1阶张量→向量,表示一个一维数组。例如V = [1,2,3] (列表[1,2,3])
2阶张量→矩阵,表示一个二维数组,它可由i行j列个元素,每个元素用行号和列号共同索引到。例如m = [[1,2,3],[4,5,6],[7,8,9]],在这个矩阵m中,元素1的索引就是m的第一行第一列。
判断张量是几阶的,就通过判断张量右边的方括号数,0个是0阶,1个是1阶……n个就是n阶。张量可以表示0到n阶数组。
3.tensorflow的数据类型:tf.float32(32位浮点)、tf.int32(32位整形)等等。
代码举例(实现两个张量的加法):
import tensorflow as tf #导入tensorflow模块,简写为tf
a = tf.constant([1.0,2.0]) #定义一个张量a等于常数[1.0,2.0]
b = tf.constant([3.0,4.0]) #定义一个张量b等于常数[3.0,4.0]
result = a + b #实现a+b的加法
print(result)
验证结果:
result是一个名为"add:0"的张量,因为shape的()中仅有一个元素,故维度是1,这个元素是2,表示第一个维度里有两个元素,是浮点型的。
【补充:在运行上述代码时出现了警告:FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / ‘(1,)type’.
_np_quint16 = np.dtype([(“quint16”, np.uint16, 1)])。大家感兴趣可以自行百度,个人觉得在现在没有什么影响,毕竟只是一个future的warning,但是以后还是要注意书写方式。现在我没有找到解决消除这个警告的办法。】
其实上述的代码就是一个计算过程,就是一张计算图。从输出结果我们可以看出,结果仅显示是个张量,并未实际运算显示张量的值。故计算图只显示计算过程,不计算运算结果。现在让我们了解一下计算图:
4.计算图(Graph):搭建神经网络的过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算。
举例:在第一讲中提过,神经网络的基本单元是神经元,神经元的基本模型如图:
其实就是数学中的“乘加运算”。x1、x2是输入,w1、w2分别是x1→y和x2→y的权重。y = x1w1 + x2w2。我们用张量运算描述这个神经元:
import tensorflow as tf #导入tensorflow模块,简写为tf
x = tf.constant([[1.0,2.0]]) #x是一个一行两列的张量,为常量
w = tf.constant([[3.0],[4.0]]) #w是一个两行一列的张量,为常量
y = tf.matmul(x,w) #实现xw矩阵乘法。x是一行两列,w是两行一列,输出结果为一行一列的二维张量
print(y)
跟上一段代码一样,我们得到的仅是计算过程,而非计算结果:
如果想得到运算结果就要用到会话了:
5.会话(Session):执行计算图中的节点运算。我们用with结构实现,语法如图:
注意Session首字母大写。sess.run(y)就可以结算出矩阵乘加结果了。
代码实现:
import tensorflow as tf #导入tensorflow模块,简写为tf
x = tf.constant([[1.0,2.0]]) #x是一个一行两列的张量,为常量
w = tf.constant([[3.0],[4.0]]) #w是一个两行一列的张量,为常量
y = tf.matmul(x,w) #x是一行两列,w是两行一列,输出结果为一行一列的二维张量
print(y)
with tf.Session() as sess:
print(sess.run(y))
运行结果(无视报错):
得到结果即为11.0(1.03.0 + 2.04.0 = 11.0)
【在课程中,老师使用的是Vim,最后介绍了降低tensorflow提升等级的操作,在这里附上助教笔记,如感兴趣可自行观看网课(网课链接在文首已附):
】