TensorFlow1基础

本文仅做学习总结,如有侵权立删

一、设计理念

1. 图的定义和运行完全分开,采用符号式编程

  • 先定义各种变量
  • 建立一个数据流图
  • 在数据流图中规定各个变量之间的计算关系
  • 对数据流图进行编译
  • 直至真正的输入数据进入图中,才形成数据流输出值。

2. 运算都放在图中,图的运行只发生在session中。

  • 开启session后,可以用数据去填充节点,进行运算
  • 关闭会话后,就不能进行计算了

二、运行流程

  • 运行流程主要有2步:构造模型和训练

  • 模型图:但没发生实际运算。【Tensor,Variable,placeholder】

img

  • 训练:有实际数据输入,梯度计算等操作。【session】

三、编程模型

1
2
# 导包
import tensorflow as tf
1
2
3
4
5
6
7
8
9
10
# 创建常量vec1和vec2
vec1 = tf.constant([[1,2]])
vec2 = tf.constant([[3],[4]])

'''
vec1为1×2的向量
<tf.Tensor 'Const:0' shape=(1, 2) dtype=int32>
vec2为2×1的向量
<tf.Tensor 'Const_1:0' shape=(2, 1) dtype=int32>
'''
1
2
3
4
5
6
7
8
9
10
# 创建矩阵相乘的操作
product = tf.matmul(vec1, vec2)
'''
<tf.Tensor 'MatMul:0' shape=(1, 1) dtype=int32>
调换矩阵乘法的顺序,直接可以看出结果的形状不一样
'''
productv2 = tf.matmul(vec2, vec1)
'''
<tf.Tensor 'MatMul_1:0' shape=(2, 2) dtype=int32>
'''

In [10]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建会话Session并输出计算的结果
with tf.Session() as sess:
product_res = sess.run(product)
productv2_res = sess.run(productv2)
print(product_res)
print(productv2_res)

'''
[[11]]
[[3 6]
[4 8]]

从结果可以看出`product`的shape为1×1
`productv2`的shape为2×2
符合矩阵乘法的法则

'''