TensorFlow程序设计模式

记录学习TensorFlow的过程,使用教程《深度学习人工智能实践应用》——林大贵

之前几篇简单的记录了如何使用Keras设计模型。本篇记录如何使用TensorFlow自行设计模型。

TensorFlow与Keras不同的是,TensorFlow需要自行设计张量(矩阵)运算。

1.建立计算图

建立一个计算图,创建一个常量和一个变量

# 建立计算图
import tensorflow as tf
ts_c = tf.constant(2,name='ts_c')
ts_x = tf.Variable(ts_c+5,name='ts_x')
/Users/jingyuyan/anaconda3/lib/python3.6/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters
# 执行计算图
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('ts_c = ',sess.run(ts_c))
    print('ts_x = ',sess.run(ts_x))
ts_c =  2
ts_x =  7
# 查看TensorFlow常量
ts_c
<tf.Tensor 'ts_c:0' shape=() dtype=int32>
  • tf.Tensor 代表这是TensorFlow张量
  • shape = () 代表这是零维的tensor,也就是数值
  • dtype=int32 表示张量类型为int32
# 建立TensorFlow变量
ts_x = tf.Variable(ts_c+5,name='ts_x')

ts_x
<tf.Variable 'ts_x_1:0' shape=() dtype=int32_ref>

变量必须执行计算图后才能看得到

2.执行计算图

建立计算图后,我们就可以执行计算图。只是执行计算图之前必须先建立session,在TensorFlow中session代表在客户端和执行设备之间建立连接。有了这个连接,就可以在设备中执行计算图,后序任何与任何设备之间的沟通都必须通过这个session,并且可以获得执行后的结果。

# 建立session
sess = tf.Session()
# 执行TensorFlow来初始化变量
init = tf.global_variables_initializer()
sess.run(init)
# 显示TensorFlow常数
print('ts_c = ',sess.run(ts_c))
ts_c =  2
# 显示TensorFlow变量
print('ts_x = ',sess.run(ts_x))
ts_x =  7
# 使用eval()方法显示TensorFlow常数
print('ts_c = ',ts_c.eval(session=sess))
ts_c =  2
# 使用eval()方法显示TensorFlow变量
print('ts_x = ',ts_x.eval(session=sess))
ts_x =  7
# 关闭session
sess.close()
# 以上代码一起执行
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print('ts_c = ',sess.run(ts_c))
print('ts_x = ',sess.run(ts_x))
print('ts_c = ',ts_c.eval(session=sess))
print('ts_x = ',ts_x.eval(session=sess))
sess.close()
ts_c =  2
ts_x =  7
ts_c =  2
ts_x =  7
# 使用whit语句打开session并且自动关闭
a = tf.constant(2,name='a')
x = tf.Variable(a+5,name='x')
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('a = ',sess.run(a))
    print('x = ',sess.run(x))
a =  2
x =  7

3.TensorFlow placeholder

前面我们建立计算图时设置了ts_c常数为2,变量ts_x为ts_c+5,这都是建立计算图阶段就已经设置完成的。如果需要在执行计算图阶段才设置这些数值,那必须使用placeholder。

# 以下建立两个placeholder,分别是width和height,然后使用tf.multiply将两个数相乘得到area面积
width = tf.placeholder("int32")
height = tf.placeholder("int32")
area = tf.multiply(width,height)
# 执行sess.run传入feed_dict参数{width,height}
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('area = ',sess.run(area,feed_dict={width:6,height:8}))
area =  48

4.tensorBoard

TensorFlow提供了可视化的方法查看我们建立的计算图

# 建立TensorFlow Variable变量
width = tf.placeholder("int32",name='width')
height = tf.placeholder("int32",name='height')
area = tf.multiply(width,height,name='area')

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('area = ',sess.run(area,feed_dict={width:6,height:8}))
area =  48
# 将下面程序代码显示在TensorBoard中的log文件
tf.summary.merge_all()
train_writer = tf.summary.FileWriter('log/area',sess.graph)

打开终端进入到文件后,启动TensorBorad

tensorboard --logdir=~/pywork/log/area

5.建立一维与二维张量

之前提到了零维的张量,也就是标量(数值),接下来我们来建立:一维张量为向量,二维以上的张量为矩阵。

# 建立一维张量(向量)
ts_X = tf.Variable([0.4,0.2,0.4])
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X = sess.run(ts_X)
    print(X)
[0.4 0.2 0.4]
# 查看一维张量 因为有三个数值,所以显示3
print(X.shape)
(3,)
# 建立二维张量
ts_X = tf.Variable([[0.4,0.2,0.4]])
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X = sess.run(ts_X)
    print(X)
[[0.4 0.2 0.4]]
# 查看二维张量 可以看到两个中括号代表二维,显示(13)表示第一维一项数据,第二纬三项数据(3个数值)
print(X.shape)
(1, 3)
# 再次建立二维张量
ts_X = tf.Variable([
    [-0.5,-0.2],
    [-0.3,0.4],
    [-0.5,0.2]])
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    X = sess.run(ts_X)
    print(X)
[[-0.5 -0.2]
 [-0.3  0.4]
 [-0.5  0.2]]
# 查看二维张量 第一纬有3项数据,第二维有2项数据(2个数值)
print(X.shape)
(3, 2)

6.矩阵基本运算

接下来分别是矩阵的乘法和加法

# 矩阵乘法
# XW = X * W

X = tf.Variable([[1.,1.,1.]])

W = tf.Variable([
    [-0.5,-0.2],
    [-0.3,0.4],
    [-0.5,0.2]
])

XW = tf.matmul(X,W)

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print(sess.run(XW))
[[-1.3  0.4]]
# 矩阵加法,直接用“+”即可
# Sum = XW + b

b = tf.Variable([[0.1,0.2]])
XW = tf.Variable([[-1.3,0.4]])

Sum = XW + b
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('sum:')
    print(sess.run(Sum))
sum:
[[-1.1999999  0.6      ]]
# 矩阵的乘法与加法一起使用
# XWb = X * W + b

X = tf.Variable([[1.,1.,1.]])

W = tf.Variable([
    [-0.5,-0.2],
    [-0.3,0.4],
    [-0.5,0.2]
])

b = tf.Variable([[0.1,0.2]])

XWb = tf.matmul(X,W) + b

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    print('XWb:')
    print(sess.run(XWb))
XWb:
[[-1.1999999  0.6      ]]

7.结论

本篇记录了如何使用TensorFlow基本张量运算,下一篇记录如何使用张量(矩阵)来模拟类神经网络的运行。

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:http://tunm.top/article/tf_1/